asavonic 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; +} ---------------- 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(); } 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