From: Jason Merrill Date: Wed, 6 May 2015 02:07:40 +0000 (-0400) Subject: decl.c (start_decl): Don't push the plain VAR_DECL for a variable template. X-Git-Tag: basepoints/gcc-7~7370 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f8aa3dd388ad8726e23c20e50bd7d4561fd0bc38;p=thirdparty%2Fgcc.git decl.c (start_decl): Don't push the plain VAR_DECL for a variable template. * decl.c (start_decl): Don't push the plain VAR_DECL for a variable template. From-SVN: r222837 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 3276b76bbb39..04e6a50b1904 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2015-05-05 Jason Merrill + * decl.c (start_decl): Don't push the plain VAR_DECL for a + variable template. + DR 1518 DR 1630 PR c++/54835 diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 6ec157912af9..261a12d61162 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -4825,8 +4825,11 @@ start_decl (const cp_declarator *declarator, was_public = TREE_PUBLIC (decl); - /* Enter this declaration into the symbol table. */ - decl = maybe_push_decl (decl); + /* Enter this declaration into the symbol table. Don't push the plain + VAR_DECL for a variable template. */ + if (!template_parm_scope_p () + || TREE_CODE (decl) != VAR_DECL) + decl = maybe_push_decl (decl); if (processing_template_decl) decl = push_template_decl (decl); diff --git a/gcc/testsuite/g++.dg/cpp1y/var-templ24.C b/gcc/testsuite/g++.dg/cpp1y/var-templ24.C new file mode 100644 index 000000000000..d8f7cbf41ec8 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1y/var-templ24.C @@ -0,0 +1,5 @@ +// { dg-do compile { target c++14 } } + +template bool Foo = Foo; +template <> bool Foo = true; +int i = Foo;