tra added a comment. In our case the headers from a relatively old glibc and compiler errors out on this:
/* This function is used in the `isfinite' macro. */ __MATH_INLINE int __NTH (__finite (double __x)) { return (__extension__ (((((union { double __d; int __i[2]; }) {__d: __x}).__i[1] | 0x800fffffu) + 1) >> 31)); } expanded to this: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) int __finite (double __x) throw () { return (__extension__ (((((union { double __d; int __i[2]; }) {__d: __x}).__i[1] | 0x800fffffu) + 1) >> 31)); } The error: .../include/bits/mathinline.h:945:9: error: '(anonymous union at .../include/bits/mathinline.h:945:9)' cannot be defined in a type specifier (((((union { double __d; int __i[2]; }) {__d: __x}).__i[1] ^ .../include/bits/mathinline.h:945:55: error: member reference base type 'void' is not a structure or union (((((union { double __d; int __i[2]; }) {__d: __x}).__i[1] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~ Also, whatever macros we generate do not prevent headers from using x86 inline assembly. I see quite a few inline asm code in preprocessed output. The headers are from libc ~2.19. Repository: rL LLVM https://reviews.llvm.org/D50845 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits