re PR c++/86706 (ICE in build_base_path, at cp/class.c:294)
authorJason Merrill <jason@redhat.com>
Fri, 3 Aug 2018 15:10:32 +0000 (17:10 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Fri, 3 Aug 2018 15:10:32 +0000 (17:10 +0200)
PR c++/86706
* class.c (build_base_path): Use currently_open_class.

* g++.dg/template/pr86706.C: New test.

From-SVN: r263293

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

index 77fbed674762655e1cbdc2fae8a436dae069c29e..17f9821b939961141bab8164cf0d758e5a7622de 100644 (file)
@@ -1,3 +1,8 @@
+2018-08-03  Jason Merrill  <jason@redhat.com>
+
+       PR c++/86706
+       * class.c (build_base_path): Use currently_open_class.
+
 2018-08-02  David Malcolm  <dmalcolm@redhat.com>
 
        * error.c (cxx_print_error_function): Duplicate "file" before
index 76a9e186c269891423c8422568691478b4ed5aaf..7b10b20ede5eac19ed85b22ac27e874b4a871b55 100644 (file)
@@ -278,6 +278,9 @@ build_base_path (enum tree_code code,
   probe = TYPE_MAIN_VARIANT (TREE_TYPE (expr));
   if (want_pointer)
     probe = TYPE_MAIN_VARIANT (TREE_TYPE (probe));
+  if (dependent_type_p (probe))
+    if (tree open = currently_open_class (probe))
+      probe = open;
 
   if (code == PLUS_EXPR
       && !SAME_BINFO_TYPE_P (BINFO_TYPE (d_binfo), probe))
index 25a59801a2629e2107d96fe73d8fa18261fc95c0..966c13b33cfdf9a32bb71b998d6bcf26b26f4e13 100644 (file)
@@ -1,3 +1,8 @@
+2018-08-03  Jason Merrill  <jason@redhat.com>
+
+       PR c++/86706
+       * g++.dg/template/pr86706.C: New test.
+
 2018-08-03  Richard Sandiford  <richard.sandiford@arm.com>
 
        * gcc.dg/vect/bb-slp-over-widen-1.c: Expect AVG_FLOOR to be used
 2018-08-03  Martin Liska  <mliska@suse.cz>
 
        * gcc.dg/predict-1.c: Adjust scanned pattern to cover 2 digits.
-       * gcc.dg/predict-13.c:Likewise.
-       * gcc.dg/predict-3.c:Likewise.
-       * gcc.dg/predict-4.c:Likewise.
-       * gcc.dg/predict-5.c:Likewise.
-       * gcc.dg/predict-6.c:Likewise.
-       * gcc.dg/predict-9.c:Likewise.
-       * gfortran.dg/predict-1.f90:Likewise.
+       * gcc.dg/predict-13.c: Likewise.
+       * gcc.dg/predict-3.c: Likewise.
+       * gcc.dg/predict-4.c: Likewise.
+       * gcc.dg/predict-5.c: Likewise.
+       * gcc.dg/predict-6.c: Likewise.
+       * gcc.dg/predict-9.c: Likewise.
+       * gfortran.dg/predict-1.f90: Likewise.
 
 2018-08-02  Richard Biener  <rguenther@suse.de>
 
 2018-02-01  Marek Polacek  <polacek@redhat.com>
 
        PR c++/84125
-       * g++.dg/cpp1y/lambda-generic-84125.C:New test.
+       * g++.dg/cpp1y/lambda-generic-84125.C: New test.
 
 2018-01-30  Jeff Law  <law@redhat.com>
 
diff --git a/gcc/testsuite/g++.dg/template/pr86706.C b/gcc/testsuite/g++.dg/template/pr86706.C
new file mode 100644 (file)
index 0000000..86af18a
--- /dev/null
@@ -0,0 +1,16 @@
+// PR c++/86706
+// { dg-do compile }
+
+class A { int b; };
+
+template <class, typename>
+class C : A { C (); static C *f; };
+
+template <class T, typename U>
+C<T, U> *C<T, U>::f;
+
+template <class T, typename U>
+C<T, U>::C ()
+{
+  f->b;
+}