re PR c++/79825 (Uninitialized uses in aggregate copies of empty structs (missed...
authorRichard Biener <rguenther@suse.de>
Fri, 3 Mar 2017 11:30:32 +0000 (11:30 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Fri, 3 Mar 2017 11:30:32 +0000 (11:30 +0000)
2017-03-03  Richard Biener  <rguenther@suse.de>

PR c++/79825
* cp-gimplify.c (simple_empty_class_p): Handle EMPTY_CLASS_EXPR.

* g++.dg/warn/Wuninitialized-8.C: New testcase.

From-SVN: r245866

gcc/cp/ChangeLog
gcc/cp/cp-gimplify.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/warn/Wuninitialized-8.C [new file with mode: 0644]

index 7ff2827..f98726e 100644 (file)
@@ -1,3 +1,8 @@
+2017-03-03  Richard Biener  <rguenther@suse.de>
+
+       PR c++/79825
+       * cp-gimplify.c (simple_empty_class_p): Handle EMPTY_CLASS_EXPR.
+
 2017-03-03  Marek Polacek  <polacek@redhat.com>
 
        PR c++/79791
index 3eec940..ebb5da9 100644 (file)
@@ -549,6 +549,7 @@ simple_empty_class_p (tree type, tree op)
   return
     ((TREE_CODE (op) == COMPOUND_EXPR
       && simple_empty_class_p (type, TREE_OPERAND (op, 1)))
+     || TREE_CODE (op) == EMPTY_CLASS_EXPR
      || is_gimple_lvalue (op)
      || INDIRECT_REF_P (op)
      || (TREE_CODE (op) == CONSTRUCTOR
index 25450ea..b223ee2 100644 (file)
@@ -1,3 +1,8 @@
+2017-03-03  Richard Biener  <rguenther@suse.de>
+
+       PR c++/79825
+       * g++.dg/warn/Wuninitialized-8.C: New testcase.
+
 2017-03-03  Jakub Jelinek  <jakub@redhat.com>
 
        * gcc.dg/pr57134.c: Use empty inline asm string literal.
diff --git a/gcc/testsuite/g++.dg/warn/Wuninitialized-8.C b/gcc/testsuite/g++.dg/warn/Wuninitialized-8.C
new file mode 100644 (file)
index 0000000..cb9cfee
--- /dev/null
@@ -0,0 +1,18 @@
+// { dg-do compile }
+// { dg-options "-Wuninitialized" }
+
+struct A;
+struct B
+{
+  B(A);
+};
+struct C
+{
+  template <typename PassT> void m_fn1(PassT p1) { new B(p1); }  // { dg-bogus "uninitialized" }
+};
+struct A {};
+void fn1()
+{
+  C a;
+  a.m_fn1(A());
+}