]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR c++/65721 (Internal compiler error segmentation fault)
authorJason Merrill <jason@redhat.com>
Thu, 23 Apr 2015 13:21:11 +0000 (09:21 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Thu, 23 Apr 2015 13:21:11 +0000 (09:21 -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: r222366

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

index db4228f1fa29c2cc7866a28a63846fc259e977b9..0166bee588bfef7d64790cfacf96ed9cb2093d84 100644 (file)
@@ -1,3 +1,9 @@
+2015-04-23  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-23  David Krauss  <david_work@me.com>
 
        PR c++/59766
index 0137c3f4a337019c974b9484e4231e445652a24c..b76cf0808f58f6b5aa9a28146235f87f8c41988c 100644 (file)
@@ -3381,7 +3381,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;
+}