https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96832

            Bug ID: 96832
           Summary: Wrong assumption for -Werror=nonnull check
           Product: gcc
           Version: 10.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: jernej.skrabec at siol dot net
  Target Milestone: ---

Following code:

#include <stdlib.h>
#include <unistd.h>
int main()
{
        char *path = getcwd(0, 4096);
        free(path);
        return 0;
}

Fails to compile with -Wall -Werror with:

main.c: In function ‘main’:
main.c:5:15: error: argument 1 is null but the corresponding size argument 2
value is 4096 [-Werror=nonnull]
    5 |  char *path = getcwd(0, 4096);
      |               ^~~~~~~~~~~~~~~
In file included from main.c:2:
/usr/include/unistd.h:520:14: note: in a call to function ‘getcwd’ declared
with attribute ‘write_only (1, 2)’
  520 | extern char *getcwd (char *__buf, size_t __size) __THROW __wur
      |              ^~~~~~
cc1: all warnings being treated as errors

even though it's correct according to
https://man7.org/linux/man-pages//man2/getcwd.2.html for glibc, which have
extension for exactly this case.

This was tested with gcc 10.2.0 and glibc 2.32 on Arch Linux. Code in question
comes from nss library.

Reply via email to