This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
PR middle-end/26264: Extraneous warning with __builtin_stdarg_start
- From: "Manuel López-Ibáñez" <lopezibanez at gmail dot com>
- To: "GCC Patches" <gcc-patches at gcc dot gnu dot org>
- Date: Sat, 23 Feb 2008 22:14:13 +0100
- Subject: PR middle-end/26264: Extraneous warning with __builtin_stdarg_start
Updated version of: http://gcc.gnu.org/ml/gcc-patches/2007-11/msg00106.html
Boostrapped and regression tested on x86_64-unknown-linux-gnu.
OK for 4.4?
2007-11-03 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
PR 26264
* c.opt: Enable Wdeprecated for C and ObjC.
* builtins.c (expand_builtin): Warn for __builtin_stdarg_start being
deprecated.
* gimplify.c (gimplify_call_expr): Handle __builtin_stdarg_start.
testsuite/
* 20021023-1.c: Add -Wno-deprecated.
* pr17301-1.c: Likewise.
* pr17301-2.c: Likewise.
* pr26264: New.
Index: gcc/builtins.c
===================================================================
--- gcc/builtins.c (revision 132166)
+++ gcc/builtins.c (working copy)
@@ -6698,12 +6698,15 @@ expand_builtin (tree exp, rtx target, rt
return expand_builtin_eh_return_data_regno (exp);
#endif
case BUILT_IN_EXTEND_POINTER:
return expand_builtin_extend_pointer (CALL_EXPR_ARG (exp, 0));
- case BUILT_IN_VA_START:
case BUILT_IN_STDARG_START:
+ warning (OPT_Wdeprecated,
+ "%<__builtin_stdarg_start%> is deprecated, "
+ "use %<__builtin_va_start%> instead.");
+ case BUILT_IN_VA_START:
return expand_builtin_va_start (exp);
case BUILT_IN_VA_END:
return expand_builtin_va_end (exp);
case BUILT_IN_VA_COPY:
return expand_builtin_va_copy (exp);
Index: gcc/testsuite/gcc.dg/20021023-1.c
===================================================================
--- gcc/testsuite/gcc.dg/20021023-1.c (revision 132166)
+++ gcc/testsuite/gcc.dg/20021023-1.c (working copy)
@@ -1,9 +1,9 @@
/* This testcase ICEd on x86-64 because LABEL_REF + small const was not
considered as local_symbolic_operand. */
/* { dg-do compile { target fpic } } */
-/* { dg-options "-O2 -fpic" } */
+/* { dg-options "-O2 -fpic -Wno-deprecated" } */
typedef __builtin_va_list va_list;
static unsigned int
foo (void *a, float b, const char *c, va_list d, void *e)
Index: gcc/testsuite/gcc.dg/pr17301-2.c
===================================================================
--- gcc/testsuite/gcc.dg/pr17301-2.c (revision 132166)
+++ gcc/testsuite/gcc.dg/pr17301-2.c (working copy)
@@ -1,9 +1,9 @@
/* Invalid use of __builtin_stdarg_start should not cause an ICE. Bug
17301. Case with no arguments. */
/* { dg-do compile } */
-/* { dg-options "" } */
+/* { dg-options "-Wno-deprecated" } */
void foo (char *format, ...)
{
__builtin_stdarg_start (); /* { dg-error "too few arguments to function '__builtin_stdarg_start'" } */
}
Index: gcc/testsuite/gcc.dg/pr26264.c
===================================================================
--- gcc/testsuite/gcc.dg/pr26264.c (revision 0)
+++ gcc/testsuite/gcc.dg/pr26264.c (revision 0)
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+/* { dg-options "" } */
+typedef __builtin_va_list __gnuc_va_list;
+typedef __gnuc_va_list va_list;
+
+extern void abort (void);
+
+void foo (int size, ...)
+{
+ va_list ap;
+ if (size != 21)
+ abort ();
+ __builtin_stdarg_start (ap, size); /* { dg-warning "__builtin_stdarg_start. is deprecated, use .__builtin_va_start. instead" } */
+ __builtin_va_end (ap);
+}
Index: gcc/testsuite/gcc.dg/pr17301-1.c
===================================================================
--- gcc/testsuite/gcc.dg/pr17301-1.c (revision 132166)
+++ gcc/testsuite/gcc.dg/pr17301-1.c (working copy)
@@ -1,9 +1,9 @@
/* Invalid use of __builtin_stdarg_start should not cause an ICE. Bug
17301. */
/* { dg-do compile } */
-/* { dg-options "" } */
+/* { dg-options "-Wno-deprecated" } */
int
write_format (char *format, ...)
{
__builtin_va_list p;
Index: gcc/c.opt
===================================================================
--- gcc/c.opt (revision 132166)
+++ gcc/c.opt (working copy)
@@ -178,11 +178,11 @@ Warn when all constructors and destructo
Wdeclaration-after-statement
C ObjC Var(warn_declaration_after_statement) Warning
Warn when a declaration is found after a statement
Wdeprecated
-C++ ObjC++ Var(warn_deprecated) Init(1) Warning
+C ObjC C++ ObjC++ Var(warn_deprecated) Init(1) Warning
Warn about deprecated compiler features
Wdiv-by-zero
C ObjC C++ ObjC++ Var(warn_div_by_zero) Init(1) Warning
Warn about compile-time integer division by zero
Index: gcc/gimplify.c
===================================================================
--- gcc/gimplify.c (revision 132166)
+++ gcc/gimplify.c (working copy)
@@ -2109,11 +2109,12 @@ gimplify_call_expr (tree *expr_p, tree *
*expr_p = new;
return GS_OK;
}
if (DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL
- && DECL_FUNCTION_CODE (decl) == BUILT_IN_VA_START)
+ && (DECL_FUNCTION_CODE (decl) == BUILT_IN_VA_START
+ || DECL_FUNCTION_CODE (decl) == BUILT_IN_STDARG_START))
{
if (call_expr_nargs (*expr_p) < 2)
{
error ("too few arguments to function %<va_start%>");
*expr_p = build_empty_stmt ();