$ cat x.cpp struct s { }; extern s var; // __attribute__ ((weak)) s var; // no error extern void foo(s&); void bar() { foo(var); } __attribute__ ((weak)) s var; // error $ /usr/local/gcc_current/bin/g++ -fsanitize=undefined -Wall -c x.cpp x.cpp:2:10: error: 'var' declared weak after being used 2 | extern s var; | ^~~ $ /usr/local/gcc_current/bin/g++ -Wall -c x.cpp $ $ /usr/local/gcc_current/bin/g++ -v Using built-in specs. COLLECT_GCC=/usr/local/gcc_current/bin/g++ COLLECT_LTO_WRAPPER=/usr/local/gcc_current/libexec/gcc/x86_64-pc-linux-gnu/10.0.0/lto-wrapper OFFLOAD_TARGET_NAMES=nvptx-none Target: x86_64-pc-linux-gnu Configured with: /home/dimhen/src/gcc_current/configure --prefix=/usr/local/gcc_current --enable-checking=yes,df,fold,rtl,extra --enable-languages=c,c++,lto --disable-multilib --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --with-tune=native Thread model: posix gcc version 10.0.0 20190503 (experimental) [trunk revision 270859] (GCC)
Confirmed. @Marek can you please take a look?
Caused by -fsanitize=null.
ubsan_maybe_instrument_reference_or_call sets flag_delete_null_pointer_checks = 1; and then we call tree_single_nonzero_warnv_p -> maybe_nonzero_address -> symtab_node::nonzero_address 1979 if (!DECL_WEAK (decl) 1980 && flag_delete_null_pointer_checks) 1981 { 1982 refuse_visibility_changes = true; 1983 return true; 1984 }
GCC 10.1 has been released.
GCC 10.2 is released, adjusting target milestone.
GCC 10.3 is being released, retargeting bugs to GCC 10.4.
r12-5761 PASS for me r12-5648 FAIL r12-5761 PASS
(In reply to Dmitry G. Dyachenko from comment #7) > r12-5761 PASS for me > > r12-5648 FAIL > r12-5761 PASS Most likely r12-5696-g53caa4723d8de .
Yes, fixed with r12-5696-g53caa4723d8de73f.
Fixed.