This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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 ();

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]