aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Manghane <cmang@google.com>2015-01-07 16:14:50 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2015-01-07 16:14:50 +0000
commitdd37378003635f34249819e39435a4f5cca90c8b (patch)
tree3f7d332f90846ff1b911ab7920f0e2269e0e1bde
parent649a274903bed44696f204578da1dd3d5318458f (diff)
downloadgcc-dd37378003635f34249819e39435a4f5cca90c8b.zip
gcc-dd37378003635f34249819e39435a4f5cca90c8b.tar.gz
gcc-dd37378003635f34249819e39435a4f5cca90c8b.tar.bz2
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
-rw-r--r--gcc/go/ChangeLog15
-rw-r--r--gcc/go/go-gcc.cc9
2 files changed, 19 insertions, 5 deletions
diff --git a/gcc/go/ChangeLog b/gcc/go/ChangeLog
index dba995c..bc95215 100644
--- a/gcc/go/ChangeLog
+++ b/gcc/go/ChangeLog
@@ -1,7 +1,14 @@
+2015-01-07 Chris Manghane <cmang@google.com>
+
+ PR go/61204
+ * go-gcc.cc (Gcc_backend::temporary_variable): Don't initialize
+ zero-sized variable.
+
2015-01-06 Chris Manghane <cmang@google.com>
- * 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 <jakub@redhat.com>
@@ -11,8 +18,8 @@
2014-12-19 Chris Manghane <cmang@google.com>
- * 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 <richard.sandiford@arm.com>
diff --git a/gcc/go/go-gcc.cc b/gcc/go/go-gcc.cc
index 18c7146..1566552 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);
}