summaryrefslogtreecommitdiff
path: root/gcc/builtins.c
diff options
context:
space:
mode:
authormanu <manu@138bc75d-0d04-0410-961f-82ee72b054a4>2008-08-21 19:05:46 +0000
committermanu <manu@138bc75d-0d04-0410-961f-82ee72b054a4>2008-08-21 19:05:46 +0000
commit24158ad72ffc0dee587acb39506faadd87039293 (patch)
tree66df13a772649e0dbf3e19930affd1570d2d47fd /gcc/builtins.c
parentd520c1f285d9b63020e133febcb559728e21f580 (diff)
downloadgcc-24158ad72ffc0dee587acb39506faadd87039293.tar.gz
2008-08-21 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
PR 30457 * builtins.c (fold_builtin_next_arg): Add warning about undefined behaviour. testsuite/ * gcc.dg/pr30457.c: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@139406 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/builtins.c')
-rw-r--r--gcc/builtins.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/gcc/builtins.c b/gcc/builtins.c
index 66956724984..59e4119efd4 100644
--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -11586,6 +11586,17 @@ fold_builtin_next_arg (tree exp, bool va_start_p)
it. */
warning (0, "second parameter of %<va_start%> not last named argument");
}
+
+ /* Undefined by C99 7.15.1.4p4 (va_start):
+ "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."
+ */
+ else if (DECL_REGISTER (arg))
+ warning (0, "undefined behaviour when second parameter of "
+ "%<va_start%> is declared with %<register%> storage");
+
/* We want to verify the second parameter just once before the tree
optimizers are run and then avoid keeping it in the tree,
as otherwise we could warn even for correct code like: