From dd37378003635f34249819e39435a4f5cca90c8b Mon Sep 17 00:00:00 2001 From: Chris Manghane Date: Wed, 7 Jan 2015 16:14:50 +0000 Subject: [PATCH] re PR go/61204 (gccgo: ICE in in fold_convert_loc [GoSmith]) PR go/61204 * go-gcc.cc (Gcc_backend::temporary_variable): Don't initialize zero-sized variable. From-SVN: r219316 --- gcc/go/ChangeLog | 15 +++++++++++---- gcc/go/go-gcc.cc | 9 ++++++++- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/gcc/go/ChangeLog b/gcc/go/ChangeLog index dba995c1f0e..bc952150582 100644 --- a/gcc/go/ChangeLog +++ b/gcc/go/ChangeLog @@ -1,7 +1,14 @@ +2015-01-07 Chris Manghane + + PR go/61204 + * go-gcc.cc (Gcc_backend::temporary_variable): Don't initialize + zero-sized variable. + 2015-01-06 Chris Manghane - * go-gcc.cc (constructor_expression): Don't initialize zero-sized - fields, just evaluate the values for side effects. + * go-gcc.cc (Gcc_backend::constructor_expression): Don't + initialize zero-sized fields, just evaluate the values for side + effects. 2015-01-05 Jakub Jelinek @@ -11,8 +18,8 @@ 2014-12-19 Chris Manghane - * go-gcc.cc (array_constructor_expression): Don't construct arrays - of zero-sized values. + * go-gcc.cc (Gcc_backend::array_constructor_expression): Don't + construct arrays of zero-sized values. 2014-10-29 Richard Sandiford diff --git a/gcc/go/go-gcc.cc b/gcc/go/go-gcc.cc index 18c7146baf6..1566552cea6 100644 --- a/gcc/go/go-gcc.cc +++ b/gcc/go/go-gcc.cc @@ -2536,7 +2536,7 @@ Gcc_backend::temporary_variable(Bfunction* function, Bblock* bblock, BIND_EXPR_VARS(bind_tree) = BLOCK_VARS(block_tree); } - if (init_tree != NULL_TREE) + if (this->type_size(btype) != 0 && init_tree != NULL_TREE) DECL_INITIAL(var) = fold_convert_loc(location.gcc_location(), type_tree, init_tree); @@ -2546,6 +2546,13 @@ Gcc_backend::temporary_variable(Bfunction* function, Bblock* bblock, *pstatement = this->make_statement(build1_loc(location.gcc_location(), DECL_EXPR, void_type_node, var)); + + // Don't initialize VAR with BINIT, but still evaluate BINIT for + // its side effects. + if (this->type_size(btype) == 0 && init_tree != NULL_TREE) + *pstatement = this->compound_statement(this->expression_statement(binit), + *pstatement); + return new Bvariable(var); }