mirror of git://gcc.gnu.org/git/gcc.git
re PR c++/58878 (Template parameter name can be hidden in a template member function defined inside the class specifier)
/cp 2013-10-25 Paolo Carlini <paolo.carlini@oracle.com> PR c++/58878 * pt.c (check_template_shadow): Don't skip declarations in inline member templates. /testsuite 2013-10-25 Paolo Carlini <paolo.carlini@oracle.com> PR c++/58878 * g++.dg/template/pr58878.C: New. From-SVN: r204071
This commit is contained in:
parent
3475937054
commit
b02ef56d8d
|
|
@ -1,3 +1,9 @@
|
||||||
|
2013-10-25 Paolo Carlini <paolo.carlini@oracle.com>
|
||||||
|
|
||||||
|
PR c++/58878
|
||||||
|
* pt.c (check_template_shadow): Don't skip declarations in inline
|
||||||
|
member templates.
|
||||||
|
|
||||||
2013-10-25 Tobias Burnus <burnus@net-b.de>
|
2013-10-25 Tobias Burnus <burnus@net-b.de>
|
||||||
|
|
||||||
PR other/33426
|
PR other/33426
|
||||||
|
|
|
||||||
|
|
@ -3511,7 +3511,8 @@ check_template_shadow (tree decl)
|
||||||
name inside a class. We check TPFI to avoid duplicate errors for
|
name inside a class. We check TPFI to avoid duplicate errors for
|
||||||
inline member templates. */
|
inline member templates. */
|
||||||
if (decl == olddecl
|
if (decl == olddecl
|
||||||
|| TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
|
|| (DECL_TEMPLATE_PARM_P (decl)
|
||||||
|
&& TEMPLATE_PARMS_FOR_INLINE (current_template_parms)))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
error ("declaration of %q+#D", decl);
|
error ("declaration of %q+#D", decl);
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
2013-10-25 Paolo Carlini <paolo.carlini@oracle.com>
|
||||||
|
|
||||||
|
PR c++/58878
|
||||||
|
* g++.dg/template/pr58878.C: New.
|
||||||
|
|
||||||
2013-10-25 Marc Glisse <marc.glisse@inria.fr>
|
2013-10-25 Marc Glisse <marc.glisse@inria.fr>
|
||||||
|
|
||||||
* gcc.dg/tree-ssa/alias-23.c: New file.
|
* gcc.dg/tree-ssa/alias-23.c: New file.
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,61 @@
|
||||||
|
// PR c++/58878
|
||||||
|
|
||||||
|
// Template-members of non-template class
|
||||||
|
struct A
|
||||||
|
{
|
||||||
|
template <typename t> // { dg-error "shadows" }
|
||||||
|
void f()
|
||||||
|
{
|
||||||
|
int t = 1; // { dg-error "declaration" }
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename t>
|
||||||
|
void g();
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename t> // { dg-error "shadows" }
|
||||||
|
void A::g()
|
||||||
|
{
|
||||||
|
int t = 2; // { dg-error "declaration" }
|
||||||
|
}
|
||||||
|
|
||||||
|
// (Non-template) Members of template class
|
||||||
|
template <typename t> // { dg-error "shadows" }
|
||||||
|
struct B
|
||||||
|
{
|
||||||
|
void f()
|
||||||
|
{
|
||||||
|
int t = 3; // { dg-error "declaration" }
|
||||||
|
}
|
||||||
|
|
||||||
|
void g();
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename t> // { dg-error "shadows" }
|
||||||
|
void B<t>::g()
|
||||||
|
{
|
||||||
|
int t = 4; // { dg-error "declaration" }
|
||||||
|
}
|
||||||
|
|
||||||
|
// Template members of template class
|
||||||
|
template <typename t> // { dg-error "shadows" }
|
||||||
|
struct C
|
||||||
|
{
|
||||||
|
template <typename s> // { dg-error "shadows" }
|
||||||
|
void f()
|
||||||
|
{
|
||||||
|
int t = 5; // { dg-error "declaration" }
|
||||||
|
int s = 6; // { dg-error "declaration" }
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename s>
|
||||||
|
void g();
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename t> // { dg-error "shadows" }
|
||||||
|
template <typename s> // { dg-error "shadows" }
|
||||||
|
void C<t>::g()
|
||||||
|
{
|
||||||
|
int t = 7; // { dg-error "declaration" }
|
||||||
|
int s = 8; // { dg-error "declaration" }
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue