re PR c++/54122 (segfault comparing enum class in lambda inside constructor of a...
authorJason Merrill <jason@redhat.com>
Wed, 6 Feb 2013 04:24:18 +0000 (23:24 -0500)
committerJason Merrill <jason@gcc.gnu.org>
Wed, 6 Feb 2013 04:24:18 +0000 (23:24 -0500)
PR c++/54122
* tree.c (lvalue_kind) [INDIRECT_REF]: Don't check for
METHOD_TYPE.

From-SVN: r195781

gcc/cp/ChangeLog
gcc/cp/tree.c
gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this7.C [new file with mode: 0644]

index a2bd701..a5f944b 100644 (file)
@@ -1,5 +1,9 @@
 2013-02-05  Jason Merrill  <jason@redhat.com>
 
+       PR c++/54122
+       * tree.c (lvalue_kind) [INDIRECT_REF]: Don't check for
+       METHOD_TYPE.
+
        PR c++/56177
        * decl.c (start_preparsed_function): Update restype if we change
        decl1.
index d1f14fc..18d9a98 100644 (file)
@@ -143,9 +143,7 @@ lvalue_kind (const_tree ref)
     case ARRAY_REF:
     case PARM_DECL:
     case RESULT_DECL:
-      if (TREE_CODE (TREE_TYPE (ref)) != METHOD_TYPE)
-       return clk_ordinary;
-      break;
+      return clk_ordinary;
 
       /* A scope ref in a template, left as SCOPE_REF to support later
         access checking.  */
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this7.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this7.C
new file mode 100644 (file)
index 0000000..6e25c33
--- /dev/null
@@ -0,0 +1,11 @@
+// PR c++/54122
+// { dg-options -std=c++11 }
+
+enum E { F };
+
+template <typename A>
+struct C
+{
+  E e;
+  void f () { auto l = [&](void)->void { if (e == F) return; }; }
+};