re PR c++/65721 (Internal compiler error segmentation fault)
authorJason Merrill <jason@redhat.com>
Tue, 14 Apr 2015 15:29:34 +0000 (11:29 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Tue, 14 Apr 2015 15:29:34 +0000 (11:29 -0400)
PR c++/65721
* name-lookup.c (do_class_using_decl): Complain about specifying
the current class even if there are dependent bases.

From-SVN: r222096

gcc/cp/ChangeLog
gcc/cp/name-lookup.c
gcc/testsuite/g++.dg/lookup/using55.C [new file with mode: 0644]

index 10df58f0bee109141059b53838b09584aa3aa927..03f6f2a422628e9b9bfa6eab637891984518cdd8 100644 (file)
@@ -1,3 +1,9 @@
+2015-04-14  Jason Merrill  <jason@redhat.com>
+
+       PR c++/65721
+       * name-lookup.c (do_class_using_decl): Complain about specifying
+       the current class even if there are dependent bases.
+
 2015-04-14  David Krauss  <david_work@me.com>
 
        PR c++/59766
index e3f7cca4436bf017b49a9f8371c4837ccf214f29..9e4e0e3adf5712098705d6e080296eb72f8b532b 100644 (file)
@@ -3408,7 +3408,7 @@ do_class_using_decl (tree scope, tree name)
                           tf_warning_or_error);
       if (b_kind < bk_proper_base)
        {
-         if (!bases_dependent_p)
+         if (!bases_dependent_p || b_kind == bk_same_type)
            {
              error_not_base_type (scope, current_class_type);
              return NULL_TREE;
diff --git a/gcc/testsuite/g++.dg/lookup/using55.C b/gcc/testsuite/g++.dg/lookup/using55.C
new file mode 100644 (file)
index 0000000..61098b1
--- /dev/null
@@ -0,0 +1,19 @@
+// PR c++/65721
+
+template<typename T>
+struct A {
+  typedef T D;
+};
+
+template<typename X>
+class B : public A<X> {
+  using typename B::D;         // { dg-error "not a base" }
+public:
+  D echo(D x) {                        // { dg-error "D" }
+    return x;
+  }
+};
+
+int main() {
+  B<int> b;
+}