Skip to content
Snippets Groups Projects
Commit 4db98b6e authored by Jason Merrill's avatar Jason Merrill Committed by Jason Merrill
Browse files

re PR c++/42447 (ICE during processing complex templates)

	PR c++/42447
	* pt.c (iterative_hash_template_arg): Don't rely on TYPE_CANONICAL
	for ARRAY_TYPE.

From-SVN: r155499
parent 2838468c
No related branches found
No related tags found
No related merge requests found
2009-12-28 Jason Merrill <jason@redhat.com>
PR c++/42447
* pt.c (iterative_hash_template_arg): Don't rely on TYPE_CANONICAL
for ARRAY_TYPE.
2009-12-24 Jason Merrill <jason@redhat.com>
PR c++/41305, DR 384
......
......@@ -1553,6 +1553,13 @@ iterative_hash_template_arg (tree arg, hashval_t val)
val = iterative_hash_object (code, val);
return iterative_hash_template_arg (TREE_OPERAND (arg, 2), val);
 
case ARRAY_TYPE:
/* layout_type sets structural equality for arrays of
incomplete type, so we can't rely on the canonical type
for hashing. */
val = iterative_hash_template_arg (TREE_TYPE (arg), val);
return iterative_hash_template_arg (TYPE_DOMAIN (arg), val);
default:
switch (tclass)
{
......
2009-12-28 Jason Merrill <jason@redhat.com>
PR c++/42447
* g++.dg/template/array21.C: New.
2009-12-28 Janus Weil <janus@gcc.gnu.org>
PR fortran/42353
......
// PR c++/42447
template<int>
void* get(int);
template<typename>
struct unique_ptr;
template<typename _Tp>
struct unique_ptr<_Tp[]>
{
typedef int __tuple_type;
void*
get() const
{ return ::get<0>(_M_t); }
__tuple_type _M_t;
};
template <typename T> class dynamic_dispatch;
template <typename TC>
struct dynamic_dispatch<void (TC::*)(int&)>
{
struct entry { };
unique_ptr<entry[]> m_Start;
template <typename UC>
void attach_handler(void (UC::*m)(int&))
{
entry* p = 0;
do {
} while(--p != m_Start.get());
}
};
template <typename TC>
class request_dispatcher
: private dynamic_dispatch<void (TC::*)(int&)>
{ request_dispatcher(); };
struct file_reader
{
void execute_command(int&);
};
template <>
request_dispatcher<file_reader>::request_dispatcher()
{ this->attach_handler(&file_reader::execute_command); }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment