This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Go patch committed: Don't crash on invalid slice composite literal
- From: Ian Lance Taylor <iant at google dot com>
- To: gcc-patches at gcc dot gnu dot org, gofrontend-dev at googlegroups dot com
- Date: Tue, 14 Dec 2010 15:56:03 -0800
- Subject: Go patch committed: Don't crash on invalid slice composite literal
This patch to the Go frontend avoids crashing when building an invalid
slice composite literal. Bootstrapped and ran Go testsuite on
x86_64-unknown-linux-gnu. Committed to mainline.
Ian
diff -r 78d78fa04fac go/expressions.cc
--- a/go/expressions.cc Tue Dec 14 15:45:04 2010 -0800
+++ b/go/expressions.cc Tue Dec 14 15:49:13 2010 -0800
@@ -10709,6 +10709,9 @@
{
Type* element_type = this->type()->array_type()->element_type();
tree element_type_tree = element_type->get_tree(context->gogo());
+ if (element_type_tree == error_mark_node)
+ return error_mark_node;
+
tree values;
tree length_tree;
if (this->vals() == NULL || this->vals()->empty())
@@ -10792,6 +10795,8 @@
// Build a constructor for the open array.
tree type_tree = this->type()->get_tree(context->gogo());
+ if (type_tree == error_mark_node)
+ return error_mark_node;
gcc_assert(TREE_CODE(type_tree) == RECORD_TYPE);
VEC(constructor_elt,gc)* init = VEC_alloc(constructor_elt, gc, 3);
@@ -10815,6 +10820,8 @@
elt->value = fold_convert(TREE_TYPE(field), length_tree);
tree constructor = build_constructor(type_tree, init);
+ if (constructor == error_mark_node)
+ return error_mark_node;
if (!is_in_function && is_constant_initializer)
TREE_CONSTANT(constructor) = 1;