mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-08 17:27:16 +08:00
re PR c++/5919 (ICE when passing variable array to template function)
PR c++/5919 * g++.dg/template/varmod1.C: New test. PR c++/5919 * pt.c (unify): Use variably_modified_type_p to test validity of template argument types. From-SVN: r59698
This commit is contained in:
parent
a82d6da5fc
commit
94fc547cec
@ -1,5 +1,9 @@
|
||||
2002-12-01 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
PR c++/5919
|
||||
* pt.c (unify): Use variably_modified_type_p to test validity of
|
||||
template argument types.
|
||||
|
||||
PR c++/8727
|
||||
* cp-tree.h (lang_type_class): Add typeinfo_var.
|
||||
(CLASSTYPE_TYPEINFO_VAR): New macro.
|
||||
|
24
gcc/cp/pt.c
24
gcc/cp/pt.c
@ -8852,21 +8852,17 @@ unify (tparms, targs, parm, arg, strict)
|
||||
return 0;
|
||||
else if (targ)
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Make sure that ARG is not a variable-sized array. (Note that
|
||||
were talking about variable-sized arrays (like `int[n]'),
|
||||
rather than arrays of unknown size (like `int[]').) We'll
|
||||
get very confused by such a type since the bound of the array
|
||||
will not be computable in an instantiation. Besides, such
|
||||
types are not allowed in ISO C++, so we can do as we please
|
||||
here. */
|
||||
if (TREE_CODE (arg) == ARRAY_TYPE
|
||||
&& !uses_template_parms (arg)
|
||||
&& TYPE_DOMAIN (arg)
|
||||
&& (TREE_CODE (TYPE_MAX_VALUE (TYPE_DOMAIN (arg)))
|
||||
!= INTEGER_CST))
|
||||
return 1;
|
||||
/* Make sure that ARG is not a variable-sized array. (Note
|
||||
that were talking about variable-sized arrays (like
|
||||
`int[n]'), rather than arrays of unknown size (like
|
||||
`int[]').) We'll get very confused by such a type since
|
||||
the bound of the array will not be computable in an
|
||||
instantiation. Besides, such types are not allowed in
|
||||
ISO C++, so we can do as we please here. */
|
||||
if (variably_modified_type_p (arg))
|
||||
return 1;
|
||||
}
|
||||
|
||||
TREE_VEC_ELT (targs, idx) = arg;
|
||||
return 0;
|
||||
|
@ -1,5 +1,8 @@
|
||||
2002-12-01 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
PR c++/5919
|
||||
* g++.dg/template/varmod1.C: New test.
|
||||
|
||||
PR c++/8727
|
||||
* g++.dg/inherit/typeinfo1.C: New test.
|
||||
|
||||
|
10
gcc/testsuite/g++.dg/template/varmod1.C
Normal file
10
gcc/testsuite/g++.dg/template/varmod1.C
Normal file
@ -0,0 +1,10 @@
|
||||
// { dg-options "-w" }
|
||||
|
||||
template<typename T> void foo(T);
|
||||
|
||||
void bar()
|
||||
{
|
||||
int i;
|
||||
int A[i][i];
|
||||
foo(A); // { dg-error }
|
||||
}
|
Loading…
Reference in New Issue
Block a user