From: Jason Merrill Date: Thu, 12 Nov 2009 23:21:33 +0000 (-0500) Subject: re PR c++/39560 (Erroneous warnings 'unused variable' in a templated class method... X-Git-Tag: releases/gcc-4.5.0~2371 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f208b768866fc84c28cf03e95d7c5d239a9d213e;p=thirdparty%2Fgcc.git re PR c++/39560 (Erroneous warnings 'unused variable' in a templated class method with union) PR c++/39560 * decl2.c (build_anon_union_vars): Set DECL_ARTIFICIAL. From-SVN: r154133 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 333c84d88b58..aa2563a56354 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2009-11-12 Jason Merrill + PR c++/39560 + * decl2.c (build_anon_union_vars): Set DECL_ARTIFICIAL. + PR c++/37037 * decl.c (grokdeclarator): Don't generate a void PARM_DECL. diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index 510aa8faec1c..7c3f7c058d6a 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -1313,6 +1313,7 @@ build_anon_union_vars (tree type, tree object) decl = build_decl (input_location, VAR_DECL, DECL_NAME (field), TREE_TYPE (field)); DECL_ANON_UNION_VAR_P (decl) = 1; + DECL_ARTIFICIAL (decl) = 1; base = get_base_address (object); TREE_PUBLIC (decl) = TREE_PUBLIC (base); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 49f2e6ab2d10..f616d2ed14cf 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2009-11-12 Jason Merrill + PR c++/39560 + * g++.dg/lookup/anon7.C: New. + PR c++/37037 * g++.dg/template/typedef21.C: New. diff --git a/gcc/testsuite/g++.dg/lookup/anon7.C b/gcc/testsuite/g++.dg/lookup/anon7.C new file mode 100644 index 000000000000..79cad0acb99b --- /dev/null +++ b/gcc/testsuite/g++.dg/lookup/anon7.C @@ -0,0 +1,26 @@ +// PR c++/39560 +// { dg-options -Wunused } + +struct X { }; + +class Z { +public: + X* cc(int c); +}; + +class F { +public: + typedef X* (Z::*MethO)(int); + typedef X* (F::*MethF)(int); + template + X* xwrapper(int i) { + union { + Z *z; + F *f; + }; // { dg-bogus "unused" } + f = this; + return ((z->*m)(i)); + } +}; + +F::MethF meth = &F::xwrapper<&Z::cc>;