https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112669
Bug ID: 112669 Summary: GCN: wrong 'LIBRARY_PATH' in presence of several different '-march=[...]' flags Product: gcc Version: 14.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: tschwinge at gcc dot gnu.org CC: ams at gcc dot gnu.org, jules at gcc dot gnu.org Target Milestone: --- Target: GCN I've run into a weird issue when several different '-march=[...]' flags appear. This causes linking to fail: the linker tries to link in the wrong multilib's libraries. This happens, for example, if the user provides '-march=[...]' for libgomp offloading testing, but a test cases also specifies a specific '-march=[...]'. The problem might perhaps be in GCN multilib setup, however it doesn't seem related to the recent changes ("amdgcn: deprecate Fiji device and multilib"), as I'm also reproducing the issue with previous GCC release branches. The issue -- I suppose -- boils down to: No '-march=[...]' flag appears, default paths: $ build-gcc-offload-amdgcn-amdhsa/gcc/xgcc -print-search-dirs | sed -n -e "/^libraries: =/{s%[^=]\+=%%;s%$PWD%[...]%g;s%:%\n%g;p}" > default $ cat < default [...]/build-gcc-offload-amdgcn-amdhsa/gcc/../lib/gcc/x86_64-pc-linux-gnu/14.0.0/accel/amdgcn-amdhsa/ [...]/build-gcc-offload-amdgcn-amdhsa/gcc/../lib/gcc/ [...]/build-gcc-offload-amdgcn-amdhsa/gcc/../lib/gcc/x86_64-pc-linux-gnu/14.0.0/accel/amdgcn-amdhsa/../../../../../../amdgcn-amdhsa/lib/x86_64-pc-linux-gnu/14.0.0/accel/amdgcn-amdhsa/ [...]/build-gcc-offload-amdgcn-amdhsa/gcc/../lib/gcc/x86_64-pc-linux-gnu/14.0.0/accel/amdgcn-amdhsa/../../../../../../amdgcn-amdhsa/lib/ [...]/build-gcc-offload-amdgcn-amdhsa/gcc/../amdgcn-amdhsa/lib/x86_64-pc-linux-gnu/14.0.0/accel/amdgcn-amdhsa/ [...]/build-gcc-offload-amdgcn-amdhsa/gcc/../amdgcn-amdhsa/lib/ If one '-march=[...]' flag appears, we get those multilib paths prepended: $ build-gcc-offload-amdgcn-amdhsa/gcc/xgcc -print-search-dirs -march=gfx906 | sed -n -e "/^libraries: =/{s%[^=]\+=%%;s%$PWD%[...]%g;s%:%\n%g;p}" > gfx906 $ diff -U1 default gfx906 --- default 2023-11-22 11:47:14.021018613 +0100 +++ gfx906 2023-11-22 11:47:21.856931965 +0100 @@ -1 +1,7 @@ +[...]/build-gcc-offload-amdgcn-amdhsa/gcc/../lib/gcc/x86_64-pc-linux-gnu/14.0.0/accel/amdgcn-amdhsa/gfx906/ +[...]/build-gcc-offload-amdgcn-amdhsa/gcc/../lib/gcc/gfx906/ +[...]/build-gcc-offload-amdgcn-amdhsa/gcc/../lib/gcc/x86_64-pc-linux-gnu/14.0.0/accel/amdgcn-amdhsa/../../../../../../amdgcn-amdhsa/lib/x86_64-pc-linux-gnu/14.0.0/accel/amdgcn-amdhsa/gfx906/ +[...]/build-gcc-offload-amdgcn-amdhsa/gcc/../lib/gcc/x86_64-pc-linux-gnu/14.0.0/accel/amdgcn-amdhsa/../../../../../../amdgcn-amdhsa/lib/gfx906/ +[...]/build-gcc-offload-amdgcn-amdhsa/gcc/../amdgcn-amdhsa/lib/x86_64-pc-linux-gnu/14.0.0/accel/amdgcn-amdhsa/gfx906/ +[...]/build-gcc-offload-amdgcn-amdhsa/gcc/../amdgcn-amdhsa/lib/gfx906/ [...]/build-gcc-offload-amdgcn-amdhsa/gcc/../lib/gcc/x86_64-pc-linux-gnu/14.0.0/accel/amdgcn-amdhsa/ Similarly, if the same '-march=[...]' flag appears twice, we get those multilib paths prepended: $ build-gcc-offload-amdgcn-amdhsa/gcc/xgcc -print-search-dirs -march=gfx908 -march=gfx908 | sed -n -e "/^libraries: =/{s%[^=]\+=%%;s%$PWD%[...]%g;s%:%\n%g;p}" > gfx908 $ diff -U1 default gfx908 --- default 2023-11-22 11:47:14.021018613 +0100 +++ gfx908 2023-11-22 11:47:34.760789347 +0100 @@ -1 +1,7 @@ +[...]/build-gcc-offload-amdgcn-amdhsa/gcc/../lib/gcc/x86_64-pc-linux-gnu/14.0.0/accel/amdgcn-amdhsa/gfx908/ +[...]/build-gcc-offload-amdgcn-amdhsa/gcc/../lib/gcc/gfx908/ +[...]/build-gcc-offload-amdgcn-amdhsa/gcc/../lib/gcc/x86_64-pc-linux-gnu/14.0.0/accel/amdgcn-amdhsa/../../../../../../amdgcn-amdhsa/lib/x86_64-pc-linux-gnu/14.0.0/accel/amdgcn-amdhsa/gfx908/ +[...]/build-gcc-offload-amdgcn-amdhsa/gcc/../lib/gcc/x86_64-pc-linux-gnu/14.0.0/accel/amdgcn-amdhsa/../../../../../../amdgcn-amdhsa/lib/gfx908/ +[...]/build-gcc-offload-amdgcn-amdhsa/gcc/../amdgcn-amdhsa/lib/x86_64-pc-linux-gnu/14.0.0/accel/amdgcn-amdhsa/gfx908/ +[...]/build-gcc-offload-amdgcn-amdhsa/gcc/../amdgcn-amdhsa/lib/gfx908/ [...]/build-gcc-offload-amdgcn-amdhsa/gcc/../lib/gcc/x86_64-pc-linux-gnu/14.0.0/accel/amdgcn-amdhsa/ However, if several different '-march=[...]' flags appear, we're back to the default: $ build-gcc-offload-amdgcn-amdhsa/gcc/xgcc -print-search-dirs -march=gfx906 -march=gfx908 | sed -n -e "/^libraries: =/{s%[^=]\+=%%;s%$PWD%[...]%g;s%:%\n%g;p}" > gfx906,gfx908 $ cmp default gfx906,gfx908 && echo 'no difference' no difference $ build-gcc-offload-amdgcn-amdhsa/gcc/xgcc -print-search-dirs -march=gfx908 -march=gfx906 | sed -n -e "/^libraries: =/{s%[^=]\+=%%;s%$PWD%[...]%g;s%:%\n%g;p}" > gfx908,gfx906 $ cmp default gfx908,gfx906 && echo 'no difference' no difference Instead, the last '-march=[...]' should win.