diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/c-family/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/c-family/c.opt | 4 | ||||
-rw-r--r-- | gcc/cp/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/class.c | 6 | ||||
-rw-r--r-- | gcc/doc/invoke.texi | 7 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/inh-ctor11.C | 4 |
6 files changed, 27 insertions, 2 deletions
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 82f1fa2..cabd82c 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -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 diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt index d2a97ab..60cb726 100644 --- a/gcc/c-family/c.opt +++ b/gcc/c-family/c.opt @@ -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 diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index c7c67e2..38e79f5 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -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 diff --git a/gcc/cp/class.c b/gcc/cp/class.c index a478de8..3e1b44a 100644 --- a/gcc/cp/class.c +++ b/gcc/cp/class.c @@ -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 diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 6a90ff1..a6baee7 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -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 diff --git a/gcc/testsuite/g++.dg/cpp0x/inh-ctor11.C b/gcc/testsuite/g++.dg/cpp0x/inh-ctor11.C index 8e8ff01..282402b 100644 --- a/gcc/testsuite/g++.dg/cpp0x/inh-ctor11.C +++ b/gcc/testsuite/g++.dg/cpp0x/inh-ctor11.C @@ -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); |