[Bug c++/102378] missing -Waddress in template code at definition time rather than instantiation
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102378 Richard Biener changed: What|Removed |Added Target Milestone|12.3|12.4 --- Comment #7 from Richard Biener --- GCC 12.3 is being released, retargeting bugs to GCC 12.4.
[Bug c++/102378] missing -Waddress in template code at definition time rather than instantiation
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102378 Richard Biener changed: What|Removed |Added Target Milestone|12.2|12.3 --- Comment #6 from Richard Biener --- GCC 12.2 is being released, retargeting bugs to GCC 12.3.
[Bug c++/102378] missing -Waddress in template code at definition time rather than instantiation
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102378 Jakub Jelinek changed: What|Removed |Added Target Milestone|12.0|12.2 --- Comment #5 from Jakub Jelinek --- GCC 12.1 is being released, retargeting bugs to GCC 12.2.
[Bug c++/102378] missing -Waddress in template code at definition time rather than instantiation
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102378 Martin Sebor changed: What|Removed |Added Status|UNCONFIRMED |ASSIGNED Last reconfirmed||2021-09-16 Target Milestone|--- |12.0 Ever confirmed|0 |1 --- Comment #4 from Martin Sebor --- (In reply to Andrew Pinski from comment #2) > (In reply to Andrew Pinski from comment #1) > > GCC warns only at instantiation time. > > And it has been that way since at least 4.4.0. Not quite. It depends on where a warning is implemented. As the test case below shows, G++ does diagnose some problems in uninstantiated templates but not others. Jason's suggestion in the review I pointed to is to try to do better and the purpose of this bug is to capture that limitation and improvement for the work I'm doing. $ cat t.C && gcc -S -Wall -Wredundant-tags t.C struct A { A (); ~A (); }; template void f () { volatile struct A a;// -Wredundant-tags (good) register int n = sizeof a; // -Wregister (good) __builtin_memset (, 0, n);// missing -Wclass-memaccess and volatile A* to A* conversion warning } t.C: In function ‘void f()’: t.C:6:12: warning: redundant class-key ‘struct’ in reference to ‘struct A’ [-Wredundant-tags] 6 | volatile struct A a;// -Wredundant-tags (good) |^~ |-- t.C:7:16: warning: ISO C++17 does not allow ‘register’ storage class specifier [-Wregister] 7 | register int n = sizeof a; // -Wregister (good) |^
[Bug c++/102378] missing -Waddress in template code at definition time rather than instantiation
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102378 --- Comment #3 from Martin Sebor --- With the correct explicit instantiation directive things look much better: $ cat pr102378.C && gcc -S -Wall pr102378.C int f () { int a[2]; return == 0; // -Waddress (good) } template int g () { { int a[2]; return == 0;// missing -Waddress } { T t; return == 0;// no -Waddress for type-dependent expr (good) } { T a[2]; return == 0;// missing -Waddress } } template int h () { { int a[2]; return == 0;// -Waddress (good) } { T t; return == 0;// -Waddress (good) } { T a[2]; return == 0;// -Waddress (good) } } template int h (); pr102378.C: In function ‘int f()’: pr102378.C:4:13: warning: the address of ‘a’ will never be NULL [-Waddress] 4 | return == 0; // -Waddress (good) | ~~~^~~~ pr102378.C: In instantiation of ‘int h() [with T = int]’: pr102378.C:45:22: required from here pr102378.C:31:15: warning: the address of ‘a’ will never be NULL [-Waddress] 31 | return == 0;// -Waddress (good) |~~~^~~~ pr102378.C:36:15: warning: the address of ‘t’ will never be NULL [-Waddress] 36 | return == 0;// -Waddress (good) |~~~^~~~ pr102378.C:41:15: warning: the address of ‘a’ will never be NULL [-Waddress] 41 | return == 0;// -Waddress (good) |~~~^~~~
[Bug c++/102378] missing -Waddress in template code at definition time rather than instantiation
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102378 Andrew Pinski changed: What|Removed |Added Summary|missing -Waddress in|missing -Waddress in |template code |template code at definition ||time rather than ||instantiation Severity|normal |enhancement Keywords||diagnostic --- Comment #2 from Andrew Pinski --- (In reply to Andrew Pinski from comment #1) > GCC warns only at instantiation time. And it has been that way since at least 4.4.0.