aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/c-family/ChangeLog4
-rw-r--r--gcc/c-family/c.opt4
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/class.c6
-rw-r--r--gcc/doc/invoke.texi7
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/inh-ctor11.C4
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);