re PR lto/45959 (ICE: tree code 'template_type_parm' is not supported in gimple streams with -flto/-fwhopr)
PR lto/45959 PR lto/45960 * pt.c (tsubst_copy) [INTEGER_CST]: Instantiate the type. From-SVN: r165306
This commit is contained in:
parent
d6d5951a4a
commit
9c3c8ad740
@ -1,3 +1,9 @@
|
||||
2010-10-10 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR lto/45959
|
||||
PR lto/45960
|
||||
* pt.c (tsubst_copy) [INTEGER_CST]: Instantiate the type.
|
||||
|
||||
2010-10-07 Andi Kleen <ak@linux.intel.com>
|
||||
|
||||
* Make-lang.in (c++_OBJS): Remove dummy-checksum.o.
|
||||
|
11
gcc/cp/pt.c
11
gcc/cp/pt.c
@ -11373,6 +11373,17 @@ tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
|
||||
error ("use %<...%> to expand argument pack");
|
||||
return error_mark_node;
|
||||
|
||||
case INTEGER_CST:
|
||||
case REAL_CST:
|
||||
case STRING_CST:
|
||||
{
|
||||
/* Instantiate any typedefs in the type. */
|
||||
tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
|
||||
r = fold_convert (type, t);
|
||||
gcc_assert (TREE_CODE (r) == code);
|
||||
return r;
|
||||
}
|
||||
|
||||
default:
|
||||
return t;
|
||||
}
|
||||
|
@ -1,3 +1,8 @@
|
||||
2010-10-10 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
* g++.dg/lto/20101010-1_0.C: New testcase.
|
||||
* g++.dg/lto/20101010-2_0.C: Likewise.
|
||||
|
||||
2010-10-11 Ira Rosen <irar@il.ibm.com>
|
||||
|
||||
PR tree-optimization/45902
|
||||
|
109
gcc/testsuite/g++.dg/lto/20101010-1_0.C
Normal file
109
gcc/testsuite/g++.dg/lto/20101010-1_0.C
Normal file
@ -0,0 +1,109 @@
|
||||
// { dg-lto-do link }
|
||||
|
||||
typedef long size_t;
|
||||
template < class, class > struct pair
|
||||
{
|
||||
}
|
||||
;
|
||||
template < typename > class allocator;
|
||||
template < typename > struct equal_to;
|
||||
|
||||
template < class > struct hash;
|
||||
template
|
||||
<
|
||||
class, class, class, class, class, class > struct dense_hashtable_iterator;
|
||||
template
|
||||
<
|
||||
class,
|
||||
class, class, class, class, class > struct dense_hashtable_const_iterator;
|
||||
template
|
||||
<
|
||||
class
|
||||
Value,
|
||||
class
|
||||
Key,
|
||||
class
|
||||
HashFcn,
|
||||
class ExtractKey, class EqualKey, class Alloc > class dense_hashtable
|
||||
{
|
||||
public:
|
||||
typedef Key key_type;
|
||||
typedef Value value_type;
|
||||
typedef size_t size_type;
|
||||
typedef
|
||||
dense_hashtable_iterator
|
||||
< Value, Key, HashFcn, ExtractKey, EqualKey, Alloc > iterator;
|
||||
typedef
|
||||
dense_hashtable_const_iterator
|
||||
< Value, Key, HashFcn, ExtractKey, EqualKey, Alloc > const_iterator;
|
||||
static const size_type ILLEGAL_BUCKET = (-1);
|
||||
pair < size_type, size_type > find_position (key_type)
|
||||
{
|
||||
size_type insert_pos = ILLEGAL_BUCKET;
|
||||
}
|
||||
pair < iterator, bool > insert_noresize (value_type obj)
|
||||
{
|
||||
pair < size_type, size_type > pos = find_position ((obj));
|
||||
}
|
||||
pair < iterator, bool > insert (value_type & obj)
|
||||
{
|
||||
insert_noresize (obj);
|
||||
}
|
||||
ExtractKey get_key;
|
||||
}
|
||||
|
||||
;
|
||||
template
|
||||
<
|
||||
class
|
||||
Value,
|
||||
class
|
||||
HashFcn
|
||||
=
|
||||
hash
|
||||
<
|
||||
Value
|
||||
>,
|
||||
class
|
||||
EqualKey
|
||||
=
|
||||
equal_to < Value >, class Alloc = allocator < Value > >class dense_hash_set
|
||||
{
|
||||
struct Identity
|
||||
{
|
||||
}
|
||||
;
|
||||
typedef
|
||||
dense_hashtable < Value, Value, HashFcn, Identity, EqualKey, Alloc > ht;
|
||||
ht rep;
|
||||
public:
|
||||
typedef typename ht::value_type value_type;
|
||||
typedef typename ht::const_iterator iterator;
|
||||
pair < iterator, bool > insert (value_type obj)
|
||||
{
|
||||
pair < typename ht::iterator, bool > p = rep.insert (obj);
|
||||
}
|
||||
}
|
||||
|
||||
;
|
||||
class blah_46
|
||||
{
|
||||
}
|
||||
;
|
||||
struct foo_10:dense_hash_set < blah_46 >
|
||||
{
|
||||
}
|
||||
;
|
||||
class foo_14
|
||||
{
|
||||
void hmmmmh_5 (blah_46);
|
||||
foo_10 negative_rrrrrrr_type_data_;
|
||||
}
|
||||
;
|
||||
void
|
||||
foo_14::hmmmmh_5 (blah_46 hahaha_id)
|
||||
{
|
||||
negative_rrrrrrr_type_data_.insert (hahaha_id);
|
||||
}
|
||||
|
||||
int main () { return 0; }
|
32
gcc/testsuite/g++.dg/lto/20101010-2_0.C
Normal file
32
gcc/testsuite/g++.dg/lto/20101010-2_0.C
Normal file
@ -0,0 +1,32 @@
|
||||
// { dg-lto-do link }
|
||||
|
||||
typedef int size_t;
|
||||
template < size_t _Nw > struct _Base_bitset
|
||||
{
|
||||
typedef unsigned _WordT;
|
||||
_WordT _M_w[_Nw];
|
||||
void _M_do_set ()
|
||||
{
|
||||
for (size_t __i;;)
|
||||
_M_w[__i] = static_cast < _WordT > (0);
|
||||
}
|
||||
};
|
||||
|
||||
template < size_t > class bitset:
|
||||
_Base_bitset < ((sizeof (unsigned)) + ((sizeof (unsigned)) ? : 1)) >
|
||||
{
|
||||
public:
|
||||
bitset set ()
|
||||
{
|
||||
_M_do_set ();
|
||||
}
|
||||
};
|
||||
|
||||
void
|
||||
test01 ()
|
||||
{
|
||||
bitset < 96 > z6;
|
||||
z6.set ();
|
||||
}
|
||||
|
||||
int main() { return 0; }
|
Loading…
Reference in New Issue
Block a user