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:
Volker Reichelt 2006-06-20 13:02:47 +00:00 committed by Volker Reichelt
parent 8fdbc9c6eb
commit 2e5d297000
5 changed files with 24 additions and 2 deletions

View file

@ -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.

View file

@ -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)))
{

View file

@ -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));

View file

@ -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

View file

@ -0,0 +1,9 @@
// PR c++/28052
// { dg-do compile }
struct A
{
double d : 2; // { dg-error "non-integral" }
A() {}
~A() {}
};