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