re PR c++/28052 (ICE on invalid bitfield)
PR c++/28052 * init.c (push_base_cleanups): Skip members with invalid types. * typeck.c (build_class_member_access_expr): Robustify. * g++.dg/other/bitfield2.C: New test. From-SVN: r114811
This commit is contained in:
parent
8fdbc9c6eb
commit
2e5d297000
5 changed files with 24 additions and 2 deletions
|
@ -1,3 +1,9 @@
|
|||
2006-06-20 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
|
||||
|
||||
PR c++/28052
|
||||
* init.c (push_base_cleanups): Skip members with invalid types.
|
||||
* typeck.c (build_class_member_access_expr): Robustify.
|
||||
|
||||
2006-06-19 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
* pt.c (instantiate_template): Fix typo in comment.
|
||||
|
|
|
@ -2898,7 +2898,9 @@ push_base_cleanups (void)
|
|||
for (member = TYPE_FIELDS (current_class_type); member;
|
||||
member = TREE_CHAIN (member))
|
||||
{
|
||||
if (TREE_CODE (member) != FIELD_DECL || DECL_ARTIFICIAL (member))
|
||||
if (TREE_TYPE (member) == error_mark_node
|
||||
|| TREE_CODE (member) != FIELD_DECL
|
||||
|| DECL_ARTIFICIAL (member))
|
||||
continue;
|
||||
if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (member)))
|
||||
{
|
||||
|
|
|
@ -1723,7 +1723,7 @@ build_class_member_access_expr (tree object, tree member,
|
|||
tree member_scope;
|
||||
tree result = NULL_TREE;
|
||||
|
||||
if (object == error_mark_node || member == error_mark_node)
|
||||
if (error_operand_p (object) || error_operand_p (member))
|
||||
return error_mark_node;
|
||||
|
||||
gcc_assert (DECL_P (member) || BASELINK_P (member));
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2006-06-20 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
|
||||
|
||||
PR c++/28052
|
||||
* g++.dg/other/bitfield2.C: New test.
|
||||
|
||||
2006-06-20 Zdenek Dvorak <dvorakz@suse.cz>
|
||||
|
||||
PR tree-optimization/27331
|
||||
|
|
9
gcc/testsuite/g++.dg/other/bitfield2.C
Normal file
9
gcc/testsuite/g++.dg/other/bitfield2.C
Normal file
|
@ -0,0 +1,9 @@
|
|||
// PR c++/28052
|
||||
// { dg-do compile }
|
||||
|
||||
struct A
|
||||
{
|
||||
double d : 2; // { dg-error "non-integral" }
|
||||
A() {}
|
||||
~A() {}
|
||||
};
|
Loading…
Add table
Reference in a new issue