[LLVMbugs] [Bug 24134] New: Clang ignores nonnull attributes on declarations following definitions when compiling as C++; behavior differs from gcc and EDG
bugzilla-daemon at llvm.org
bugzilla-daemon at llvm.org
Wed Jul 15 10:35:29 PDT 2015
https://llvm.org/bugs/show_bug.cgi?id=24134
Bug ID: 24134
Summary: Clang ignores nonnull attributes on declarations
following definitions when compiling as C++; behavior
differs from gcc and EDG
Product: clang
Version: trunk
Hardware: PC
OS: Linux
Status: NEW
Severity: normal
Priority: P
Component: -New Bugs
Assignee: unassignedclangbugs at nondot.org
Reporter: thonermann at coverity.com
CC: llvmbugs at cs.uiuc.edu
Classification: Unclassified
Clang (3.4-3.6,trunk) ignores nonnull attributes on declarations following
definitions when compiling as C++, but not as C. I presume the difference has
to do with tentative definitions in C.
A test case is below. Recent versions of gcc and EDG both allow nonnull
attributes on declarations following a definition, at least for this test case,
so this behavior appears to be inconsistent with other common compilers.
$ cat t.c
void (*pf)(int *p1);
extern void (*pf)(int *p1)
__attribute__((nonnull));
void f() {
pf(0);
}
# Compiling as C, no warning is emitted, the nonnull attribute
# is present in the resulting AST:
$ clang -c -Xclang -ast-dump t.c
t.c:5:9: warning: null passed to a callee that requires a non-null argument
[-Wnonnull]
pf(0);
~^
...
`-VarDecl 0x822dda0 prev 0x822dc50 <line:2:1, col:26> col:15 pf 'void (*)(int
*)' extern
`-NonNullAttr 0x822de00 <line:3:20>
...
# Compiling as C++, a warning is emitted and the nonnull attribute
# is not present in the resulting AST:
$ clang -c -Xclang -ast-dump -x c++ t.c
t.c:3:20: warning: attribute declaration must precede definition
[-Wignored-attributes]
__attribute__((nonnull));
^
t.c:1:8: note: previous definition is here
void (*pf)(int *p1);
^
...
`-VarDecl 0x82e41e0 prev 0x82e4090 <line:2:1, col:26> col:15 pf 'void (*)(int
*)' extern
...
1 warning generated.
# gcc (4.6.3) emits a warning when invoking *pf with a null argument regardless
of whether the code is compiled as C or C++:
$ gcc -Wall -c t.c
t.c: In function 'f':
t.c:5:5: warning: null argument where non-null required (argument 1)
[-Wnonnull]
$ gcc -Wall -c -x c++ t.c
t.c: In function 'void f()':
t.c:5:9: warning: null argument where non-null required (argument 1)
[-Wnonnull]
--
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/20150715/35529b7f/attachment.html>
More information about the llvm-bugs
mailing list