OSDN Git Service

PR c++/51029
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 9 Nov 2011 18:13:09 +0000 (18:13 +0000)
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 9 Nov 2011 18:13:09 +0000 (18:13 +0000)
* class.c (build_base_path): Don't ICE in fold_non_dependent_expr.

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

gcc/cp/ChangeLog
gcc/cp/class.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/template/virtual1.C [new file with mode: 0644]

index cba11e1..9c5a2bc 100644 (file)
@@ -1,5 +1,8 @@
 2011-11-09  Jason Merrill  <jason@redhat.com>
 
+       PR c++/51029
+       * class.c (build_base_path): Don't ICE in fold_non_dependent_expr.
+
        * Make-lang.in (check_g++_parallelize): Add dg-torture.exp.
        (check-c++0x): Obsolete.
 
index f10a749..d2cf63c 100644 (file)
@@ -359,6 +359,11 @@ build_base_path (enum tree_code code,
         V_BINFO.  That offset is an entry in D_BINFO's vtable.  */
       tree v_offset;
 
+      /* In a constructor template, current_in_charge_parm isn't set,
+        and we might end up here via fold_non_dependent_expr.  */
+      if (fixed_type_p < 0 && !(cfun && current_in_charge_parm))
+       fixed_type_p = 0;
+
       if (fixed_type_p < 0 && in_base_initializer)
        {
          /* In a base member initializer, we cannot rely on the
index cff301e..e4ec7ae 100644 (file)
@@ -1,3 +1,8 @@
+2011-11-09  Jason Merrill  <jason@redhat.com>
+
+       PR c++/51029
+       * g++.dg/template/virtual1.C: New.
+
 2011-11-08  Jason Merrill  <jason@redhat.com>
 
        Run most C++ tests in both C++98 and C++11 modes.
diff --git a/gcc/testsuite/g++.dg/template/virtual1.C b/gcc/testsuite/g++.dg/template/virtual1.C
new file mode 100644 (file)
index 0000000..ee86bf3
--- /dev/null
@@ -0,0 +1,14 @@
+// PR c++/51029
+
+struct A
+{
+  void foo();
+};
+
+struct B : virtual A
+{
+  template<int> B()
+  {
+    foo();
+  }
+};