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

Reply via email to