From 44ed47547a1cb981faa264b9c29bd52c2f2891af Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Thu, 21 Jul 2016 23:45:43 -0400 Subject: [PATCH] PR c++/71630 - extern variable template * pt.c (instantiate_decl): Fix pattern_defined for namespace scope variable templates. From-SVN: r238622 --- gcc/cp/ChangeLog | 4 ++++ gcc/cp/pt.c | 5 ++++- gcc/testsuite/g++.dg/cpp1y/var-templ53.C | 10 ++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/cpp1y/var-templ53.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index b196d54937d..8cf538b22a5 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2016-07-21 Jason Merrill + PR c++/71630 + * pt.c (instantiate_decl): Fix pattern_defined for namespace scope + variable templates. + PR c++/71913 * call.c (unsafe_copy_elision_p): It's OK to elide when initializing an unknown object. diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index d7f380857bd..5e29d998287 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -21853,7 +21853,10 @@ instantiate_decl (tree d, int defer_ok, else { deleted_p = false; - pattern_defined = ! DECL_IN_AGGR_P (code_pattern); + if (DECL_CLASS_SCOPE_P (code_pattern)) + pattern_defined = ! DECL_IN_AGGR_P (code_pattern); + else + pattern_defined = ! DECL_EXTERNAL (code_pattern); } /* We may be in the middle of deferred access check. Disable it now. */ diff --git a/gcc/testsuite/g++.dg/cpp1y/var-templ53.C b/gcc/testsuite/g++.dg/cpp1y/var-templ53.C new file mode 100644 index 00000000000..3e30d679f19 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1y/var-templ53.C @@ -0,0 +1,10 @@ +// PR c++/71630 +// { dg-do compile { target c++14 } } + +template +extern T pi; + +int main() +{ + return pi; +} -- 2.30.2