re PR c++/20028 (class and then template class gives an ICE)
gcc/cp/ChangeLog: PR c++/20028 * class.c (finish_struct): Initialize TYPE_SIZE_UNIT of a template along with TYPE_SIZE. gcc/testsuite/ChangeLog: PR c++/20028 * g++.dg/template/crash34.C: New. From-SVN: r95182
This commit is contained in:
parent
2a2c6e55e7
commit
ae54ec16cd
4 changed files with 20 additions and 0 deletions
|
@ -1,5 +1,9 @@
|
|||
2005-02-17 Alexandre Oliva <aoliva@redhat.com>
|
||||
|
||||
PR c++/20028
|
||||
* class.c (finish_struct): Initialize TYPE_SIZE_UNIT of a
|
||||
template along with TYPE_SIZE.
|
||||
|
||||
PR c++/20022
|
||||
* semantics.c (perform_deferred_access_checks): Use
|
||||
get_deferred_access_checks to get the top of the stack.
|
||||
|
|
|
@ -5111,6 +5111,7 @@ finish_struct (tree t, tree attributes)
|
|||
|
||||
finish_struct_methods (t);
|
||||
TYPE_SIZE (t) = bitsize_zero_node;
|
||||
TYPE_SIZE_UNIT (t) = size_zero_node;
|
||||
|
||||
/* We need to emit an error message if this type was used as a parameter
|
||||
and it is an abstract type, even if it is a template. We construct
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
2005-02-17 Alexandre Oliva <aoliva@redhat.com>
|
||||
|
||||
PR c++/20028
|
||||
* g++.dg/template/crash34.C: New.
|
||||
|
||||
PR c++/20022
|
||||
* g++.dg/other/access3.C: New.
|
||||
|
||||
|
|
12
gcc/testsuite/g++.dg/template/crash34.C
Normal file
12
gcc/testsuite/g++.dg/template/crash34.C
Normal file
|
@ -0,0 +1,12 @@
|
|||
// { dg-do compile }
|
||||
|
||||
// PR c++/20028
|
||||
|
||||
// We used to crash when referencing TYPE_SIZE_UNIT of the messed-up
|
||||
// type used for x, because it was not initialized.
|
||||
|
||||
class Foo;
|
||||
|
||||
template <typename T> class Foo { }; // { dg-error "not a template type" }
|
||||
|
||||
Foo<int> x; // { dg-error "not a template" }
|
Loading…
Add table
Reference in a new issue