LLVM Bugzilla is read-only and represents the historical archive of all LLVM issues filled before November 26, 2021. Use github to submit LLVM bugs

Bug 52559 - Poor fixit suggestion for an uninitialized then dereferenced pointer
Summary: Poor fixit suggestion for an uninitialized then dereferenced pointer
Status: NEW
Alias: None
Product: clang
Classification: Unclassified
Component: C (show other bugs)
Version: trunk
Hardware: PC Windows NT
: P enhancement
Assignee: Unassigned Clang Bugs
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2021-11-19 09:19 PST by Nathan Chancellor
Modified: 2021-11-19 09:20 PST (History)
7 users (show)

See Also:
Fixed By Commit(s):


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Nathan Chancellor 2021-11-19 09:19:18 PST
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.