]> gcc.gnu.org Git - gcc.git/commitdiff
re PR c++/12924 (ICE in lookup_member, at cp/search.c:1228)
authorKriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
Sun, 23 Nov 2003 11:32:14 +0000 (11:32 +0000)
committerKriang Lerdsuwanakij <lerdsuwa@gcc.gnu.org>
Sun, 23 Nov 2003 11:32:14 +0000 (11:32 +0000)
PR c++/12924
* typeck.c (finish_class_member_access_expr): Handle TEMPLATE_ID_EXPR
with OVERLOAD and DECL nodes as the first operand.

* g++.dg/template/template-id-2.C: New test.

From-SVN: r73851

gcc/cp/ChangeLog
gcc/cp/typeck.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/template/template-id-2.C [new file with mode: 0644]

index 1ec5f1f3b0be331f6e8701986c171f04f5c13fa6..a6d4223a3e1d55ba9a674181d01b4b63895eb7ed 100644 (file)
@@ -1,3 +1,9 @@
+2003-11-23  Kriang Lerdsuwanakij  <lerdsuwa@users.sourceforge.net>
+
+       PR c++/12924
+       * typeck.c (finish_class_member_access_expr): Handle TEMPLATE_ID_EXPR
+       with OVERLOAD and DECL nodes as the first operand.
+
 2003-11-22  Kriang Lerdsuwanakij  <lerdsuwa@users.sourceforge.net>
 
        * pt.c (tsubst) <ARRAY_REF>: Remove erroneous argument to build_nt.
index fa325c0b952a121fbad5a710bce1339a9e9914c3..f2cca5feabf1dcba6b17cead2d21d694b39a8bde 100644 (file)
@@ -1860,6 +1860,11 @@ finish_class_member_access_expr (tree object, tree name)
          is_template_id = true;
          template_args = TREE_OPERAND (name, 1);
          name = TREE_OPERAND (name, 0);
+
+         if (TREE_CODE (name) == OVERLOAD)
+           name = DECL_NAME (get_first_fn (name));
+         else if (DECL_P (name))
+           name = DECL_NAME (name);
        }
 
       if (TREE_CODE (name) == SCOPE_REF)
index c339a0da467ab7947665112d96d35689a15702da..592508be6642ee000f4cdccf8c0957f298b17fdd 100644 (file)
@@ -1,3 +1,8 @@
+2003-11-23  Kriang Lerdsuwanakij  <lerdsuwa@users.sourceforge.net>
+
+       PR c++/12924
+       * g++.dg/template/template-id-2.C: New test.
+
 2003-11-22  Kriang Lerdsuwanakij  <lerdsuwa@users.sourceforge.net>
 
        PR c++/5369
diff --git a/gcc/testsuite/g++.dg/template/template-id-2.C b/gcc/testsuite/g++.dg/template/template-id-2.C
new file mode 100644 (file)
index 0000000..1bc378c
--- /dev/null
@@ -0,0 +1,22 @@
+// { dg-do compile }
+
+// Origin: Richard Guenther <rguenth@tat.physik.uni-tuebingen.de>
+
+// PR c++/12924
+
+template<typename> struct A {};
+
+template<> struct A<void>
+{
+    template<typename T> void foo()
+    {
+        A<T> a;
+        a.template foo<int>(); // { dg-error "no member" }
+    }
+};
+
+void bar()
+{
+    A<void> a;
+    a.foo<int>();              // { dg-error "instantiated" }
+}
This page took 0.12299 seconds and 5 git commands to generate.