[llvm-bugs] [Bug 52559] New: Poor fixit suggestion for an uninitialized then dereferenced pointer

via llvm-bugs llvm-bugs at lists.llvm.org
Fri Nov 19 09:19:18 PST 2021


https://bugs.llvm.org/show_bug.cgi?id=52559

            Bug ID: 52559
           Summary: Poor fixit suggestion for an uninitialized then
                    dereferenced pointer
           Product: clang
           Version: trunk
          Hardware: PC
                OS: Windows NT
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: C
          Assignee: unassignedclangbugs at nondot.org
          Reporter: natechancellor at gmail.com
                CC: blitzrakete at gmail.com, dgregor at apple.com,
                    erik.pilkington at gmail.com, llvm-bugs at lists.llvm.org,
                    richard-llvm at metafoo.co.uk

Initially reported at
https://lore.kernel.org/r/YZdhYEVCgqh5MB3J@smile.fi.intel.com/.

Reproducer: https://godbolt.org/z/EcPP7o1T9

$ cat test.c
#define NULL ((void *)0)

struct foo {
        int x;
};

void bar(void) {
        struct foo *a;
        a->x = 1;
}

$ gcc --version
gcc (GCC) 11.1.0
Copyright (C) 2021 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.

$ gcc -Wuninitialized -c -o /dev/null test.c
test.c: In function ‘bar’:
test.c:9:14: warning: ‘a’ is used uninitialized [-Wuninitialized]
    9 |         a->x = 1;
      |         ~~~~~^~~

$ clang --version
clang version 13.0.0
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/sbin

$ clang -fsyntax-only -Wuninitialized test.c
test.c:9:2: warning: variable 'a' is uninitialized when used here
[-Wuninitialized]
        a->x = 1;
        ^
test.c:8:15: note: initialize the variable 'a' to silence this warning
        struct foo *a;
                     ^
                      = NULL
1 warning generated.

This seems like a poor suggestion, as it is going to just result in the user's
program crashing (it probably already will but the hint does nothing to improve
that). Perhaps it should be omitted if the pointer is dereferenced (or just
altogether, since it is likely that a pointer is going to be dereferenced at
some point in its lifetime)? Having the location of the variable is helpful in
the warning but I think emitting the '= NULL' part of it is not helpful.

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20211119/88b2d362/attachment.html>


More information about the llvm-bugs mailing list