http://llvm.org/bugs/show_bug.cgi?id=18903
Bug ID: 18903
Summary: No warning on passing a parameter with register
storage to va_start, which is undefined behavior
Product: clang
Version: trunk
Hardware: PC
OS: Linux
Status: NEW
Severity: normal
Priority: P
Component: Frontend
Assignee: [email protected]
Reporter: [email protected]
CC: [email protected]
Classification: Unclassified
Based on the C11 standard, (section 7.16.1.4)
The parameter parmN is the identifier of the rightmost parameter in the
variable
parameter list in the function definition (the one just before the , ...). If
the parameter parmN is declared with the register storage class, with a
function or array type, or with a type that is not compatible with the type
that results after application of the default argument promotions, the behavior
is undefined.
Currently clang does not warn on this behavior. I think it would be interesting
to add this support.
$: cat s.c
#include <stdarg.h>
void f(register int x, ...) {
va_list ap;
va_start(ap, x);
va_end(ap);
}
$: clang-trunk -Wvarargs -c s.c
$: gcc-trunk -Wvarargs -c s.c
s.c: In function ‘f’:
s.c:4:3: warning: undefined behaviour when second parameter of ‘va_start’ is
declared with ‘register’ storage [-Wvarargs]
va_start(ap, x);
^
$: clang-trunk --version
clang version 3.5 (trunk 201498)
Target: x86_64-unknown-linux-gnu
Thread model: posix
$:
--
You are receiving this mail because:
You are on the CC list for the bug.
_______________________________________________
LLVMbugs mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/llvmbugs