* [Bug c++/102378] missing -Waddress in template code
2021-09-16 21:19 [Bug c++/102378] New: missing -Waddress in template code msebor at gcc dot gnu.org
@ 2021-09-16 21:24 ` pinskia at gcc dot gnu.org
2021-09-16 21:28 ` [Bug c++/102378] missing -Waddress in template code at definition time rather than instantiation pinskia at gcc dot gnu.org
` (5 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: pinskia at gcc dot gnu.org @ 2021-09-16 21:24 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102378
--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
GCC warns only at instantiation time.
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug c++/102378] missing -Waddress in template code at definition time rather than instantiation
2021-09-16 21:19 [Bug c++/102378] New: missing -Waddress in template code msebor at gcc dot gnu.org
2021-09-16 21:24 ` [Bug c++/102378] " pinskia at gcc dot gnu.org
@ 2021-09-16 21:28 ` pinskia at gcc dot gnu.org
2021-09-16 22:11 ` msebor at gcc dot gnu.org
` (4 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: pinskia at gcc dot gnu.org @ 2021-09-16 21:28 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102378
Andrew Pinski <pinskia at gcc dot gnu.org> 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 <pinskia at gcc dot gnu.org> ---
(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.
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug c++/102378] missing -Waddress in template code at definition time rather than instantiation
2021-09-16 21:19 [Bug c++/102378] New: missing -Waddress in template code msebor at gcc dot gnu.org
2021-09-16 21:24 ` [Bug c++/102378] " pinskia at gcc dot gnu.org
2021-09-16 21:28 ` [Bug c++/102378] missing -Waddress in template code at definition time rather than instantiation pinskia at gcc dot gnu.org
@ 2021-09-16 22:11 ` msebor at gcc dot gnu.org
2021-09-16 22:25 ` msebor at gcc dot gnu.org
` (3 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: msebor at gcc dot gnu.org @ 2021-09-16 22:11 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102378
--- Comment #3 from Martin Sebor <msebor at gcc dot gnu.org> ---
With the correct explicit instantiation directive things look much better:
$ cat pr102378.C && gcc -S -Wall pr102378.C
int f ()
{
int a[2];
return &a == 0; // -Waddress (good)
}
template <class T>
int g ()
{
{
int a[2];
return &a == 0; // missing -Waddress
}
{
T t;
return &t == 0; // no -Waddress for type-dependent expr (good)
}
{
T a[2];
return &a == 0; // missing -Waddress
}
}
template <class T>
int h ()
{
{
int a[2];
return &a == 0; // -Waddress (good)
}
{
T t;
return &t == 0; // -Waddress (good)
}
{
T a[2];
return &a == 0; // -Waddress (good)
}
}
template int h<int> ();
pr102378.C: In function ‘int f()’:
pr102378.C:4:13: warning: the address of ‘a’ will never be NULL [-Waddress]
4 | return &a == 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 &a == 0; // -Waddress (good)
| ~~~^~~~
pr102378.C:36:15: warning: the address of ‘t’ will never be NULL [-Waddress]
36 | return &t == 0; // -Waddress (good)
| ~~~^~~~
pr102378.C:41:15: warning: the address of ‘a’ will never be NULL [-Waddress]
41 | return &a == 0; // -Waddress (good)
| ~~~^~~~
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug c++/102378] missing -Waddress in template code at definition time rather than instantiation
2021-09-16 21:19 [Bug c++/102378] New: missing -Waddress in template code msebor at gcc dot gnu.org
` (2 preceding siblings ...)
2021-09-16 22:11 ` msebor at gcc dot gnu.org
@ 2021-09-16 22:25 ` msebor at gcc dot gnu.org
2022-05-06 8:31 ` jakub at gcc dot gnu.org
` (2 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: msebor at gcc dot gnu.org @ 2021-09-16 22:25 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102378
Martin Sebor <msebor at gcc dot gnu.org> 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 <msebor at gcc dot gnu.org> ---
(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 <class T>
void f ()
{
volatile struct A a; // -Wredundant-tags (good)
register int n = sizeof a; // -Wregister (good)
__builtin_memset (&a, 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)
| ^
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug c++/102378] missing -Waddress in template code at definition time rather than instantiation
2021-09-16 21:19 [Bug c++/102378] New: missing -Waddress in template code msebor at gcc dot gnu.org
` (3 preceding siblings ...)
2021-09-16 22:25 ` msebor at gcc dot gnu.org
@ 2022-05-06 8:31 ` jakub at gcc dot gnu.org
2023-05-08 12:22 ` rguenth at gcc dot gnu.org
2024-06-20 8:58 ` rguenth at gcc dot gnu.org
6 siblings, 0 replies; 8+ messages in thread
From: jakub at gcc dot gnu.org @ 2022-05-06 8:31 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102378
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Target Milestone|12.0 |12.2
--- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
GCC 12.1 is being released, retargeting bugs to GCC 12.2.
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug c++/102378] missing -Waddress in template code at definition time rather than instantiation
2021-09-16 21:19 [Bug c++/102378] New: missing -Waddress in template code msebor at gcc dot gnu.org
` (4 preceding siblings ...)
2022-05-06 8:31 ` jakub at gcc dot gnu.org
@ 2023-05-08 12:22 ` rguenth at gcc dot gnu.org
2024-06-20 8:58 ` rguenth at gcc dot gnu.org
6 siblings, 0 replies; 8+ messages in thread
From: rguenth at gcc dot gnu.org @ 2023-05-08 12:22 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102378
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Target Milestone|12.3 |12.4
--- Comment #7 from Richard Biener <rguenth at gcc dot gnu.org> ---
GCC 12.3 is being released, retargeting bugs to GCC 12.4.
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug c++/102378] missing -Waddress in template code at definition time rather than instantiation
2021-09-16 21:19 [Bug c++/102378] New: missing -Waddress in template code msebor at gcc dot gnu.org
` (5 preceding siblings ...)
2023-05-08 12:22 ` rguenth at gcc dot gnu.org
@ 2024-06-20 8:58 ` rguenth at gcc dot gnu.org
6 siblings, 0 replies; 8+ messages in thread
From: rguenth at gcc dot gnu.org @ 2024-06-20 8:58 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102378
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Target Milestone|12.4 |12.5
--- Comment #8 from Richard Biener <rguenth at gcc dot gnu.org> ---
GCC 12.4 is being released, retargeting bugs to GCC 12.5.
^ permalink raw reply [flat|nested] 8+ messages in thread