PR c++/45894
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 9 Nov 2010 11:52:59 +0000 (11:52 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 9 Nov 2010 11:52:59 +0000 (11:52 +0000)
* tree.c (lvalue_kind): Don't crash if ref has NULL type.

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

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@166481 138bc75d-0d04-0410-961f-82ee72b054a4

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 7223529..51e2171 100644 (file)
@@ -1,3 +1,8 @@
+2010-11-09  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/45894
+       * tree.c (lvalue_kind): Don't crash if ref has NULL type.
+
 2010-11-08  Jason Merrill  <jason@redhat.com>
 
        PR c++/46382
index 462e35f..ba8e978 100644 (file)
@@ -67,7 +67,8 @@ lvalue_kind (const_tree ref)
          == REFERENCE_TYPE)
     return lvalue_kind (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 f8c121e..e0f6069 100644 (file)
@@ -1,3 +1,8 @@
+2010-11-09  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/45894
+       * g++.dg/warn/Wsequence-point-2.C: New test.
+
 2010-11-09  Janus Weil  <janus@gcc.gnu.org>
 
        PR fortran/46313
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 ()) { }
+};