Eric Christopher via llvm-dev
2017-Dec-24 04:45 UTC
[llvm-dev] BackendUtil's EmitAssemblyHelper::EmitAssembly generated call in wrong order
This is a difference in evaluation order between gcc and clang. Basically this is implementation defined behavior that you're depending upon. On Sat, Dec 23, 2017, 7:47 PM Leslie Zhai <lesliezhai at llvm.org.cn> wrote:> Hi LLVM developers, > > A C++ testcase for PR35737 > > #include <iostream> > > int bar() { > std::cout << "bar" << std::endl; > return 1; > } > > int main() { > std::cout << "return: " << bar() << std::endl; > return 0; > } > > Actual output: > > return: bar > 1 > > Expected output: > > bar > return: 1 > > Workaround to edit LLVM IR: > > --- PR35737.ll 2017-12-24 11:20:12.012346163 +0800 > +++ PR35737-workaround.ll 2017-12-24 11:42:25.303256968 +0800 > @@ -62,8 +62,8 @@ > entry: > %retval = alloca i32, align 4 > store i32 0, i32* %retval, align 4 > - %call = call dereferenceable(272) %"class.std::basic_ostream"* > > @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(%"class.std::basic_ostream"* > dereferenceable(272) @_ZSt4cout, i8* getelementptr inbounds ([9 x i8], > [9 x i8]* @.str.1, i32 0, i32 0)) > %call1 = call i32 @_Z3barv() > + %call = call dereferenceable(272) %"class.std::basic_ostream"* > > @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(%"class.std::basic_ostream"* > dereferenceable(272) @_ZSt4cout, i8* getelementptr inbounds ([9 x i8], > [9 x i8]* @.str.1, i32 0, i32 0)) > %call2 = call dereferenceable(272) %"class.std::basic_ostream"* > @_ZNSolsEi(%"class.std::basic_ostream"* %call, i32 %call1) > %call3 = call dereferenceable(272) %"class.std::basic_ostream"* > @_ZNSolsEPFRSoS_E(%"class.std::basic_ostream"* %call2, > %"class.std::basic_ostream"* (%"class.std::basic_ostream"*)* > @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_) > ret i32 0 > > > Then, > > $ llc PR35737-workaround.ll > > $ clang++ PR35737-workaround.s > > $ ./a.out > > bar > return: 1 > > Please give me some advice, thanks a lot! > > -- > Regards, > Leslie Zhai - https://reviews.llvm.org/p/xiangzhai/ > > >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20171224/54082fac/attachment.html>