pt.c (unify): Check array has a domain, before checking whether it is variable sized.

cp:
	* pt.c (unify): Check array has a domain, before checking
	whether it is variable sized.
testsuite:
	* g++.old-deja/g++.pt/crash64.C: New test.

From-SVN: r38902
This commit is contained in:
Nathan Sidwell 2001-01-11 11:45:03 +00:00 committed by Nathan Sidwell
parent 98979fe0b0
commit 34e225a30b
3 changed files with 30 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2001-01-11 Nathan Sidwell <nathan@codesourcery.com>
* pt.c (unify): Check array has a domain, before checking
whether it is variable sized.
2001-01-11 Nathan Sidwell <nathan@codesourcery.com>
* decl.c (grokparms): Unobfuscate and get correct diagnostic for

View File

@ -8605,6 +8605,7 @@ unify (tparms, targs, parm, arg, strict)
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;

View File

@ -0,0 +1,24 @@
// Build don't link:
// Copyright (C) 2000 Free Software Foundation, Inc.
// Contributed by Nathan Sidwell 10 Jan 2001 <nathan@codesourcery.com>
// Bug 1546. We ICE'd trying to unify an array of unknown bound,
// checking to see if it was a variable sized array.
template <class _Tp> class allocator {};
template <class _Tp, class _Allocator>
struct _Alloc_traits
{
static const bool _S_instanceless = false;
};
template <class _Tp, class _Tp1>
struct _Alloc_traits<_Tp, allocator<_Tp1> >
{
static const bool _S_instanceless = true;
};
typedef char state [];
bool y = _Alloc_traits<state, allocator<state> >::_S_instanceless;