PiJoules wrote:

FYI this led to a compilation error when building compiler-rt 
(https://g-issues.fuchsia.dev/issues/493986215):

```
FAILED: 
compiler-rt/lib/msan/CMakeFiles/clang_rt.msan-aarch64.dir/msan_linux.cpp.o 
/b/s/w/ir/x/w/llvm_build/./bin/clang++ --target=aarch64-unknown-linux-gnu 
--sysroot=/b/s/w/ir/x/w/cipd/linux -D_DEBUG -D_GLIBCXX_ASSERTIONS 
-D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS 
-I/b/s/w/ir/x/w/llvm-llvm-project/compiler-rt/lib/msan/.. 
--target=aarch64-unknown-linux-gnu -fPIC -fno-semantic-interposition 
-fvisibility-inlines-hidden -Werror=date-time 
-Werror=unguarded-availability-new -Wall -Wextra -Wno-unused-parameter 
-Wwrite-strings -Wcast-qual -Wmissing-field-initializers -Wimplicit-fallthrough 
-Wcovered-switch-default -Wno-noexcept-type -Wnon-virtual-dtor 
-Wdelete-non-virtual-dtor -Wsuggest-override -Wstring-conversion 
-Wno-pass-failed -Wmisleading-indentation -Wctad-maybe-unsupported 
-fdiagnostics-color -ffunction-sections -fdata-sections -Xclang 
-fno-pch-timestamp 
-ffile-prefix-map=/b/s/w/ir/x/w/llvm_build/runtimes/runtimes-aarch64-unknown-linux-gnu-bins=../../../llvm-llvm-project
 -ffile-prefix-map=/b/s/w/ir/x/w/llvm-llvm-project/= -no-canonical-prefixes 
-Wall -Wno-unused-parameter -O2 -g -DNDEBUG -std=c++17 -fno-lto -fPIC 
-fno-builtin -fno-exceptions -fomit-frame-pointer -funwind-tables 
-fno-stack-protector -fno-sanitize=safe-stack -fvisibility=hidden 
-Wthread-safety -Wthread-safety-reference -Wthread-safety-beta -O3 
-gline-tables-only -Wno-gnu -Wno-variadic-macros -Wno-c99-extensions 
-ftrivial-auto-var-init=pattern -nostdinc++ -fno-rtti -fPIE -ffreestanding -MD 
-MT compiler-rt/lib/msan/CMakeFiles/clang_rt.msan-aarch64.dir/msan_linux.cpp.o 
-MF 
compiler-rt/lib/msan/CMakeFiles/clang_rt.msan-aarch64.dir/msan_linux.cpp.o.d -o 
compiler-rt/lib/msan/CMakeFiles/clang_rt.msan-aarch64.dir/msan_linux.cpp.o -c 
/b/s/w/ir/x/w/llvm-llvm-project/compiler-rt/lib/msan/msan_linux.cpp
In file included from 
/b/s/w/ir/x/w/llvm-llvm-project/compiler-rt/lib/msan/msan_linux.cpp:22:
In file included from /b/s/w/ir/x/w/cipd/linux/usr/include/stdlib.h:42:
/b/s/w/ir/x/w/cipd/linux/usr/include/aarch64-linux-gnu/bits/waitstatus.h:79:15: 
error: duplicate member '__w_retcode'
   79 |         unsigned int __w_retcode:8;
      |                      ^
/b/s/w/ir/x/w/cipd/linux/usr/include/aarch64-linux-gnu/bits/waitstatus.h:74:15: 
note: previous declaration is here
   74 |         unsigned int __w_retcode:8; /* Return code if exited normally.  
*/
      |                      ^
/b/s/w/ir/x/w/cipd/linux/usr/include/aarch64-linux-gnu/bits/waitstatus.h:80:15: 
error: 
```

Some compiler-rt sources like this one are built with `-ffreestanding` which 
prevents the host headers from being used and falls back to the compiler 
headers. The waitstatus.h header contains

```
    struct
      {
# if    __BYTE_ORDER == __LITTLE_ENDIAN
        unsigned int __w_termsig:7; /* Terminating signal.  */
        unsigned int __w_coredump:1; /* Set if dumped core.  */
        unsigned int __w_retcode:8; /* Return code if exited normally.  */
        unsigned int:16;
# endif                         /* Little endian.  */
# if    __BYTE_ORDER == __BIG_ENDIAN
        unsigned int:16;
        unsigned int __w_retcode:8;
        unsigned int __w_coredump:1;
        unsigned int __w_termsig:7;
# endif                         /* Big endian.  */
      } __wait_terminated;
```

but since these macros aren't defined in the clang header, multiple blocks get 
evaluated. Since the affected files are for the linux implementation, I think 
it should be fine to just exclude `-ffreestanding` from those sources causing 
this header to dispatch to the system header.

https://github.com/llvm/llvm-project/pull/186032
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to