c.opt (Winherited-variadic-ctor): New.
authorJason Merrill <jason@redhat.com>
Thu, 25 Oct 2012 15:53:31 +0000 (11:53 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Thu, 25 Oct 2012 15:53:31 +0000 (11:53 -0400)
c-family/
* c.opt (Winherited-variadic-ctor): New.
cp/
* class.c (one_inherited_ctor): Warn about variadic inherited ctor.

From-SVN: r192811

gcc/c-family/ChangeLog
gcc/c-family/c.opt
gcc/cp/ChangeLog
gcc/cp/class.c
gcc/doc/invoke.texi
gcc/testsuite/g++.dg/cpp0x/inh-ctor11.C

index 82f1fa22083adee3d91906dcb75e0fcda3b2c17d..cabd82c771b0b795ddad7fc1a1057e6379796dbb 100644 (file)
@@ -1,3 +1,7 @@
+2012-10-25  Jason Merrill  <jason@redhat.com>
+
+       * c.opt (Winherited-variadic-ctor): New.
+
 2012-10-25  Marc Glisse  <marc.glisse@inria.fr>
 
        PR c++/54427
index d2a97ab1019e133f2a7dc0741b5ae10762dff79b..60cb726b2c94fd687fa66a3697bedaa80d563ec0 100644 (file)
@@ -426,6 +426,10 @@ Warn when a declaration does not specify a type
 Wimport
 C ObjC C++ ObjC++ Undocumented Ignore
 
+Winherited-variadic-ctor
+C++ ObjC++ Var(warn_inh_var_ctor) Init(1) Warning
+Warn about C++11 inheriting constructors when the base has a variadic constructor
+
 Wint-to-pointer-cast
 C ObjC C++ ObjC++ Var(warn_int_to_pointer_cast) Init(1) Warning
 Warn when there is a cast to a pointer from an integer of a different size
index c7c67e29bbf78af5fec7bbcaf1068b77b38c1f30..38e79f58e6eaed3696eddeb5041c1e376bf25b79 100644 (file)
@@ -1,3 +1,7 @@
+2012-10-25  Jason Merrill  <jason@redhat.com>
+
+       * class.c (one_inherited_ctor): Warn about variadic inherited ctor.
+
 2012-10-25  Marc Glisse  <marc.glisse@inria.fr>
 
        PR c++/54427
index a478de8056376268f2c44beee008ce7aad3b6af5..3e1b44a4c1ec4371b5caaf1975ed6718a91d8ab2 100644 (file)
@@ -2807,6 +2807,12 @@ one_inherited_ctor (tree ctor, tree t)
       new_parms[i++] = TREE_VALUE (parms);
     }
   one_inheriting_sig (t, ctor, new_parms, i);
+  if (parms == NULL_TREE)
+    {
+      warning (OPT_Winherited_variadic_ctor,
+              "the ellipsis in %qD is not inherited", ctor);
+      inform (DECL_SOURCE_LOCATION (ctor), "%qD declared here", ctor);
+    }
 }
 
 /* Create default constructors, assignment operators, and so forth for
index 6a90ff19c693284bfb1e92a184c1094d54040298..a6baee7cda19b37425f68d6a619a05e11c2ba29f 100644 (file)
@@ -4632,6 +4632,13 @@ cases where multiple declaration is valid and changes nothing.
 @opindex Wno-nested-externs
 Warn if an @code{extern} declaration is encountered within a function.
 
+@item -Wno-inherited-variadic-ctor
+@opindex Winherited-variadic-ctor
+@opindex Wno-inherited-variadic-ctor
+Suppress warnings about use of C++11 inheriting constructors when the
+base class inherited from has a C variadic constructor; the warning is
+on by default because the ellipsis is not inherited.
+
 @item -Winline
 @opindex Winline
 @opindex Wno-inline
index 8e8ff010ffec31e56a298760131c2b857dc88b64..282402ba22db9a256ad5598c481bdc5b449c2902 100644 (file)
@@ -2,12 +2,12 @@
 
 struct A
 {
-  A(int, ...);
+  A(int, ...);                 // { dg-message "declared here" }
 };
 
 struct B: A
 {
-  using A::A;
+  using A::A;                  // { dg-warning "ellipsis" }
 };
 
 B b1(42);