From: Jason Merrill Date: Fri, 13 Nov 2009 15:37:29 +0000 (-0500) Subject: PR c++/21008, DR 515 X-Git-Tag: releases/gcc-4.3.5~298 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=81f038ca3662d04bf1b9eab33041b663475a26f4;p=thirdparty%2Fgcc.git PR c++/21008, DR 515 PR c++/21008, DR 515 * semantics.c (finish_non_static_data_member): Don't check derivation in a template. From-SVN: r154153 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 0990ca687e01..c81318730048 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2009-11-13 Jason Merrill + + PR c++/21008, DR 515 + * semantics.c (finish_non_static_data_member): Don't check + derivation in a template. + 2009-11-12 Jason Merrill PR c++/37037 diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index fc6469689a99..70dd353b8bb2 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -1449,6 +1449,14 @@ finish_non_static_data_member (tree decl, tree object, tree qualifying_scope) return build_min (COMPONENT_REF, type, object, decl, NULL_TREE); } + /* If PROCESSING_TEMPLATE_DECL is nonzero here, then + QUALIFYING_SCOPE is also non-null. Wrap this in a SCOPE_REF + for now. */ + else if (processing_template_decl) + return build_qualified_name (TREE_TYPE (decl), + qualifying_scope, + DECL_NAME (decl), + /*template_p=*/false); else { tree access_type = TREE_TYPE (object); @@ -1468,15 +1476,6 @@ finish_non_static_data_member (tree decl, tree object, tree qualifying_scope) } } - /* If PROCESSING_TEMPLATE_DECL is nonzero here, then - QUALIFYING_SCOPE is also non-null. Wrap this in a SCOPE_REF - for now. */ - if (processing_template_decl) - return build_qualified_name (TREE_TYPE (decl), - qualifying_scope, - DECL_NAME (decl), - /*template_p=*/false); - perform_or_defer_access_check (TYPE_BINFO (access_type), decl, decl); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ef66c3ee5f07..077763691d72 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2009-11-13 Jason Merrill + + PR c++/21008, DR 515 + * g++.dg/template/inherit4.C: New. + * g++.dg/lookup/scoped8.C: Adjust. + 2009-11-12 Jason Merrill PR c++/37037 diff --git a/gcc/testsuite/g++.dg/lookup/scoped8.C b/gcc/testsuite/g++.dg/lookup/scoped8.C index 1c3030456085..2ba28a6941b2 100644 --- a/gcc/testsuite/g++.dg/lookup/scoped8.C +++ b/gcc/testsuite/g++.dg/lookup/scoped8.C @@ -14,3 +14,5 @@ template struct B { int foo() { return A::i; } // { dg-error "this location" } }; + +template struct B<0>; diff --git a/gcc/testsuite/g++.dg/template/inherit4.C b/gcc/testsuite/g++.dg/template/inherit4.C new file mode 100644 index 000000000000..511c9e6050a1 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/inherit4.C @@ -0,0 +1,14 @@ +// PR c++/21008, DR 515 + +struct A { + int foo_; +}; +template struct B: public A { }; +template struct C: B { + int foo() { + return A::foo_; // #1 + } +}; +int f(C* p) { + return p->foo(); +}