Don't crash if a constant initializer refers to the constant.
From-SVN: r168162
This commit is contained in:
parent
ecdacbb305
commit
8e6c2a27c5
2 changed files with 5 additions and 4 deletions
|
@ -2528,7 +2528,9 @@ Const_expression::do_type()
|
|||
if (this->type_ != NULL)
|
||||
return this->type_;
|
||||
|
||||
if (this->seen_)
|
||||
Named_constant* nc = this->constant_->const_value();
|
||||
|
||||
if (this->seen_ || nc->lowering())
|
||||
{
|
||||
this->report_error(_("constant refers to itself"));
|
||||
this->type_ = Type::make_error_type();
|
||||
|
@ -2537,7 +2539,6 @@ Const_expression::do_type()
|
|||
|
||||
this->seen_ = true;
|
||||
|
||||
Named_constant* nc = this->constant_->const_value();
|
||||
Type* ret = nc->type();
|
||||
|
||||
if (ret != NULL)
|
||||
|
|
|
@ -1163,8 +1163,8 @@ Lower_parse_tree::constant(Named_object* no, bool)
|
|||
{
|
||||
Named_constant* nc = no->const_value();
|
||||
|
||||
// We can recursively a constant if the initializer expression
|
||||
// manages to refer to itself.
|
||||
// Don't get into trouble if the constant's initializer expression
|
||||
// refers to the constant itself.
|
||||
if (nc->lowering())
|
||||
return TRAVERSE_CONTINUE;
|
||||
nc->set_lowering();
|
||||
|
|
Loading…
Add table
Reference in a new issue