]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR c++/45894 ([C++0x] ICE: segmentation fault with -Wall)
authorJakub Jelinek <jakub@redhat.com>
Thu, 11 Nov 2010 20:41:34 +0000 (21:41 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Thu, 11 Nov 2010 20:41:34 +0000 (21:41 +0100)
Backport from mainline
2010-11-09  Jakub Jelinek  <jakub@redhat.com>

PR c++/45894
* tree.c (lvalue_p_1): Don't crash if ref has NULL type.

* g++.dg/warn/Wsequence-point-2.C: New test.

From-SVN: r166621

gcc/cp/ChangeLog
gcc/cp/tree.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/warn/Wsequence-point-2.C [new file with mode: 0644]

index 0eeb05ace3d06fc95c59b7832c44a79cff3f7a23..36e7a1366d6e978c821d2482d997384f6541812c 100644 (file)
@@ -1,6 +1,11 @@
 2010-11-11  Jakub Jelinek  <jakub@redhat.com>
 
        Backport from mainline
+       2010-11-09  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/45894
+       * tree.c (lvalue_p_1): Don't crash if ref has NULL type.
+
        2010-11-05  Jakub Jelinek  <jakub@redhat.com>
 
        PR c++/46160
index 2bfee63a778d20fdc677b7b75c00cc6039b5b480..ab0e95336ba3a138e44e07518243803f28466817 100644 (file)
@@ -72,7 +72,8 @@ lvalue_p_1 (const_tree ref)
          == REFERENCE_TYPE)
     return lvalue_p_1 (TREE_OPERAND (ref, 0));
 
-  if (TREE_CODE (TREE_TYPE (ref)) == REFERENCE_TYPE)
+  if (TREE_TYPE (ref)
+      && TREE_CODE (TREE_TYPE (ref)) == REFERENCE_TYPE)
     {
       /* unnamed rvalue references are rvalues */
       if (TYPE_REF_IS_RVALUE (TREE_TYPE (ref))
index 67dcced17cdb756217b0b44689ace61c25c0f169..067b1f1398ee05bcf0e37b85d226d5c253db3ba5 100644 (file)
@@ -1,6 +1,11 @@
 2010-11-11  Jakub Jelinek  <jakub@redhat.com>
 
        Backport from mainline
+       2010-11-09  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/45894
+       * g++.dg/warn/Wsequence-point-2.C: New test.
+
        2010-11-05  Jakub Jelinek  <jakub@redhat.com>
 
        PR c/44772
diff --git a/gcc/testsuite/g++.dg/warn/Wsequence-point-2.C b/gcc/testsuite/g++.dg/warn/Wsequence-point-2.C
new file mode 100644 (file)
index 0000000..ab9c97a
--- /dev/null
@@ -0,0 +1,28 @@
+// PR c++/45894
+// { dg-do compile }
+// { dg-options "-std=c++0x -Wsequence-point" }
+
+struct F
+{
+  template <typename = int>
+  void bar ();
+};
+template <typename = int>
+struct V
+{
+  V (const V &) { F::bar <>; }
+};
+struct C
+{
+  V <> v;
+};
+struct B
+{
+  C f ();
+};
+struct A
+{
+  C c;
+  B b;
+  A () : c (b.f ()) { }
+};