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

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

 



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.




-- 
<https://www.alejandro-colomar.es/>

Attachment: signature.asc
Description: PGP signature


[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