re PR c++/17395 (Incorrect lookup for parameters)
2009-05-06 Dodji Seketeli <dodji@redhat.com> gcc/cp/ChangeLog: PR c++/17395 * pt.c (tsubst_copy) <case PARM_DECL>: We don't want to tsubst the whole list of PARM_DECLs, just the current one. gcc/testsuite/ChangeLog: PR c++/17395 * g++.dg/template/call7.C: New test. From-SVN: r147201
This commit is contained in:
parent
ab3426a775
commit
c7cb9f42a8
@ -1,3 +1,9 @@
|
||||
2009-05-06 Dodji Seketeli <dodji@redhat.com>
|
||||
|
||||
PR c++/17395
|
||||
* pt.c (tsubst_copy) <case PARM_DECL>: We don't want to tsubst the
|
||||
whole list of PARM_DECLs, just the current one.
|
||||
|
||||
2009-05-05 Shujing Zhao <pearly.zhao@oracle.com>
|
||||
|
||||
* cp-tree.h:
|
||||
|
@ -10020,11 +10020,15 @@ tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
|
||||
|
||||
if (r == NULL)
|
||||
{
|
||||
tree c;
|
||||
/* This can happen for a parameter name used later in a function
|
||||
declaration (such as in a late-specified return type). Just
|
||||
make a dummy decl, since it's only used for its type. */
|
||||
gcc_assert (skip_evaluation);
|
||||
r = tsubst_decl (t, args, complain);
|
||||
/* We copy T because want to tsubst the PARM_DECL only,
|
||||
not the following PARM_DECLs that are chained to T. */
|
||||
c = copy_node (t);
|
||||
r = tsubst_decl (c, args, complain);
|
||||
/* Give it the template pattern as its context; its true context
|
||||
hasn't been instantiated yet and this is good enough for
|
||||
mangling. */
|
||||
|
@ -1,3 +1,8 @@
|
||||
2009-05-06 Dodji Seketeli <dodji@redhat.com>
|
||||
|
||||
PR c++/17395
|
||||
* g++.dg/template/call7.C: New test.
|
||||
|
||||
2009-05-06 Diego Novillo <dnovillo@google.com>
|
||||
|
||||
* lib/plugin-support.exp: Do not prefix $GMPINC with -I.
|
||||
|
19
gcc/testsuite/g++.dg/template/call7.C
Normal file
19
gcc/testsuite/g++.dg/template/call7.C
Normal file
@ -0,0 +1,19 @@
|
||||
// Contributed by Dodji Seketeli <dodji@redhat.com>
|
||||
// Origin: PR c++/17395
|
||||
// { dg-do "compile" }
|
||||
|
||||
template<int> struct X { };
|
||||
|
||||
void fu(int a, X<sizeof(a)>) { }
|
||||
|
||||
template<class T>
|
||||
void bhar(T a, X<sizeof(a)>) { }
|
||||
|
||||
int
|
||||
main()
|
||||
{
|
||||
int x;
|
||||
X<sizeof(int)> y;
|
||||
fu(x, y);
|
||||
bhar(x, y);
|
||||
}
|
Loading…
Reference in New Issue
Block a user