diff options
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/pt.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.ns/template18.C | 24 |
3 files changed, 32 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 7473cab..d7a843f 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2001-07-10 Mark Mitchell <mark@codesourcery.com> + + * pt.c (tsubst_decl): Set DECL_CONTEXT for namespace-scope + variables. + 2001-07-10 Jason Merrill <jason_merrill@redhat.com> * semantics.c (cp_expand_stmt): Fix for null diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index b601640..3d6279a 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -5946,12 +5946,13 @@ tsubst_decl (t, args, type) ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, /*complain=*/1, in_decl, /*entering_scope=*/1); + else if (DECL_NAMESPACE_SCOPE_P (t)) + ctx = DECL_CONTEXT (t); else { /* Subsequent calls to pushdecl will fill this in. */ ctx = NULL_TREE; - if (!DECL_NAMESPACE_SCOPE_P (t)) - local_p = 1; + local_p = 1; } /* Check to see if we already have this specialization. */ diff --git a/gcc/testsuite/g++.old-deja/g++.ns/template18.C b/gcc/testsuite/g++.old-deja/g++.ns/template18.C new file mode 100644 index 0000000..4b3f720 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.ns/template18.C @@ -0,0 +1,24 @@ +// Build don't run: +// Origin: Andrey Slepuhin <pooh@msu.ru> + +namespace A +{ + int j; + + template <typename val_t> + struct X + { + inline X () + { + extern int j; + i = j; + } + + int i; + }; +} + +int main () +{ + A::X<int> x; +} |