Re: Scoped attribute directive ignored diagnostic (false positive?)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The workaround is to add the size argument to the access
attribute.   

[[gnu::access(write_only, 2, 1)]]
int f(int n, char * a[n]);
int f(int n, char * a[n]);


Martin


Am Samstag, dem 14.12.2024 um 08:14 +0100 schrieb Martin Uecker:
> Yes, there are two bugs. The first with
> 
> [[gnu::access(write_only, 2)]]
> int f(int n, char * a[n]);
> 
> 
> And the second with -Wvla-parameter -Wno-attributes
> 
> [[gnu::access(write_only, 2)]]
> int f(int n, char * a[n]);
> int f(int n, char * a[n]);
> 
> Can you file two bugs? (if those don't exist yet)
> 
> Martin
> 
> 
> Am Samstag, dem 14.12.2024 um 00:03 +0100 schrieb Alejandro Colomar:
> > Hi,
> > 
> > The diagnostic for the attribute directive ignored was due to an old GCC
> > version.  However, I'm still seeing diagnostics that I think don't make
> > sense, with GCC 14.
> > 
> > I think this is a compiler bug (or two), maybe?
> > 
> > This seems to relate to array parameters; CC += Martin.
> > 
> > Cheers,
> > Alex
> > 
> > alx@www:/tmp$ cat str.c 
> > #include <errno.h>
> > #include <stddef.h>
> > #include <string.h>
> > #include <sys/types.h>
> > 
> > [[gnu::access(read_write, 1)]]
> > [[gnu::access(write_only, 4)]]
> > [[gnu::null_terminated_string_arg(1)]]
> > [[gnu::null_terminated_string_arg(2)]]
> > inline ssize_t strsep2arr(char *s, const char *restrict delim,
> >     size_t n, char *a[restrict n]);
> > 
> > // strsep(3) a string into an array of strings.
> > // Return the number of fields in the string, or -1 on error.
> > inline ssize_t strsep2arr(char *s, const char *restrict delim,
> >     size_t n, char *a[restrict n])
> > {
> > 	size_t  i;
> > 
> > 	for (i = 0; i < n && s != NULL; i++)
> > 		a[i] = strsep(&s, delim);
> > 
> > 	if (s != NULL) {
> > 		errno = E2BIG;
> > 		return -1;
> > 	}
> > 
> > 	return i;
> > }
> > 
> > alx@www:/tmp$ gcc -Wall -Wextra -S str.c 
> > str.c:10:16: warning: attribute ‘access (write_only, 4)’ positional argument 2 missing in previous designation [-Wattributes]
> >    10 | inline ssize_t strsep2arr(char *s, const char *restrict delim,
> >       |                ^~~~~~~~~~
> > str.c:11:12: note: designating the bound of variable length array argument 4
> >    11 |     size_t n, char *a[restrict n]);
> >       |     ~~~~~~~^  ~~~~~~~~~~~~~~~~~~~
> > str.c:16:21: warning: argument 4 of type ‘char *[restrict  n]’ declared as a variable length array [-Wvla-parameter]
> >    16 |     size_t n, char *a[restrict n])
> >       |               ~~~~~~^~~~~~~~~~~~~
> > str.c:11:21: note: previously declared as an ordinary array ‘char *[restrict]’
> >    11 |     size_t n, char *a[restrict n]);
> >       |               ~~~~~~^~~~~~~~~~~~~
> > str.c: In function ‘strsep2arr’:
> > str.c:15:16: warning: attribute ‘access (write_only, 4)’ positional argument 2 missing in previous designation [-Wattributes]
> >    15 | inline ssize_t strsep2arr(char *s, const char *restrict delim,
> >       |                ^~~~~~~~~~
> > str.c:16:12: note: designating the bound of variable length array argument 4
> >    11 |     size_t n, char *a[restrict n]);
> >       |               ~~~~~~~~~~~~~~~~~~~
> > ......
> >    16 |     size_t n, char *a[restrict n])
> >       |     ~~~~~~~^
> > alx@www:/tmp$ gcc --version
> > gcc (Debian 14.2.0-8) 14.2.0
> > Copyright (C) 2024 Free Software Foundation, Inc.
> > This is free software; see the source for copying conditions.  There is NO
> > warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
> > 
> > 
> > 
> > 
> 





[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux