pengfei added inline comments.
================ Comment at: clang/test/Sema/x86-no-x87.c:48-61 +void assign2() { + struct st_long_double st; +#ifndef NOERROR + // expected-error@+2{{long double is not supported on this target}} +#endif + st.ld = 0.42; +} ---------------- asavonic wrote: > pengfei wrote: > > These seems pass with GCC. https://godbolt.org/z/qM4nWhThx > Right. Assignment of a literal is compiled to just `mov` without any x87 > instructions, so it is not diagnosed by GCC. On the other hand, assignment of > a variable does trigger the error: > > void assign4(double d) { > struct st_long_double st; > st.ld = d; // error: long double is not supported on this target > } > > We can update the patch to do the same for some cases, but it does not look > very consistent, and makes assumptions on how the code is optimized and > compiled. > > GCC has an advantage here, because it emits the diagnostic at a lower level > after at lease some optimizations are done. For example, the following code > does not trigger an error for GCC because of inlining: > > double get_const() { > return 0.42; > } > void assign5(struct st_long_double *st) { > st->ld = get_const(); > } > I see. Another concern is about the 32 bits. @LiuChen3 had tested in D100091 that GCC doesn't error for 32 bits. Do we need to consider it here? Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D98895/new/ https://reviews.llvm.org/D98895 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits