aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>2005-10-15 18:13:25 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>2005-10-15 18:13:25 +0000
commit550d1bf420954b9e7dbf2695b6fd42b329d91604 (patch)
tree911c19a09bf32bbd85e9a71c0ab49c394c165f57 /gcc
parentb27cedc6118a669f16a441f2ac287b72e7f8ccac (diff)
downloadgcc-550d1bf420954b9e7dbf2695b6fd42b329d91604.zip
gcc-550d1bf420954b9e7dbf2695b6fd42b329d91604.tar.gz
gcc-550d1bf420954b9e7dbf2695b6fd42b329d91604.tar.bz2
re PR c++/21347 (spurious warning with -Wctor-dtor-privacy)
PR c++/21347 * class.c (maybe_warn_about_overly_private_class): Lazy constructors are public. PR c++/21347 * g++.dg/warn/Wctor-dtor.C: New test. From-SVN: r105441
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/class.c5
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/warn/Wctor-dtor.C13
4 files changed, 28 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 7b2ff85..51089eb 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2005-10-15 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/21347
+ * class.c (maybe_warn_about_overly_private_class): Lazy
+ constructors are public.
+
2005-10-14 Mark Mitchell <mark@codesourcery.com>
PR c++/19565
diff --git a/gcc/cp/class.c b/gcc/cp/class.c
index dc52975..b8254fe 100644
--- a/gcc/cp/class.c
+++ b/gcc/cp/class.c
@@ -1537,7 +1537,10 @@ maybe_warn_about_overly_private_class (tree t)
return;
}
- if (TYPE_HAS_CONSTRUCTOR (t))
+ if (TYPE_HAS_CONSTRUCTOR (t)
+ /* Implicitly generated constructors are always public. */
+ && (!CLASSTYPE_LAZY_DEFAULT_CTOR (t)
+ || !CLASSTYPE_LAZY_COPY_CTOR (t)))
{
int nonprivate_ctor = 0;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 04465c5c..70f1a0b 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2005-10-15 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/21347
+ * g++.dg/warn/Wctor-dtor.C: New test.
+
2005-10-14 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
PR c/23439
diff --git a/gcc/testsuite/g++.dg/warn/Wctor-dtor.C b/gcc/testsuite/g++.dg/warn/Wctor-dtor.C
new file mode 100644
index 0000000..15efb6b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/Wctor-dtor.C
@@ -0,0 +1,13 @@
+// PR c++/21347
+// { dg-options "-Wctor-dtor-privacy" }
+
+class A {
+public:
+ int x;
+ int getX() { return x; } // comment out to avoid warning
+};
+
+int foo() {
+ A a; // accepted: clearly the ctor is not private
+ return a.x;
+}