https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82601
Martin Sebor <msebor at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |msebor at gcc dot gnu.org
Assignee|unassigned at gcc dot gnu.org |msebor at gcc dot
gnu.org
Last reconfirmed|2017-12-30 00:00:00 |2021-4-2
See Also| |https://gcc.gnu.org/bugzill
| |a/show_bug.cgi?id=31279
Known to fail| |10.2.0, 11.0, 8.3.0, 9.3.0
Target Milestone|--- |12.0
Status|NEW |ASSIGNED
--- Comment #5 from Martin Sebor <msebor at gcc dot gnu.org> ---
Pr31279 asks for a warning for a warning for call-by-reference arguments with
known intent(in). This is the converse, but as I mentioned in pr31279 comment
#7 the middle end infrastructure to issue these warnings is in place. The
Fortran front end needs to make use of it.
That being said, detecting read accesses to write-only arguments within the
annotated function itself isn't implemented yet (only passing uninitialized
arguments to read-only arguments is). So I suggest tracking the Fortran
changes in pr31279 and the missing middle-end support here.
$ cat z.c && gcc -S -Wall z.c
__attribute__ ((access (read_only, 1)))
void f1 (int *);
void f2 (void)
{
int i;
f1 (&i); // -Wuninitialized (good)
}
__attribute__ ((access (write_only, 1)))
int g1 (int *p)
{
return *p; // missing warning
}
z.c: In function ‘f2’:
z.c:7:3: warning: ‘i’ is used uninitialized [-Wuninitialized]
7 | f1 (&i); // -Wuninitialized (good)
| ^~~~~~~
z.c:2:6: note: in a call to ‘f1’ declared with attribute ‘access (read_only,
1)’ here
2 | void f1 (int *);
| ^~
z.c:6:7: note: ‘i’ declared here
6 | int i;
| ^