aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>2012-02-17 19:27:27 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2012-02-17 19:27:27 +0000
commit7a6cb708b1a23103a7fab3e3d01b0e3933dc6c4a (patch)
treeb57a8d903111548a327f95b0ba0b3272352346d0 /gcc
parent061793a4cc6d5e50c8a56a3247e6f8757741cc9a (diff)
downloadgcc-7a6cb708b1a23103a7fab3e3d01b0e3933dc6c4a.zip
gcc-7a6cb708b1a23103a7fab3e3d01b0e3933dc6c4a.tar.gz
gcc-7a6cb708b1a23103a7fab3e3d01b0e3933dc6c4a.tar.bz2
compiler: Check for initialization loop in constant initializer.
From-SVN: r184347
Diffstat (limited to 'gcc')
-rw-r--r--gcc/go/gofrontend/gogo-tree.cc11
1 files changed, 9 insertions, 2 deletions
diff --git a/gcc/go/gofrontend/gogo-tree.cc b/gcc/go/gofrontend/gogo-tree.cc
index 352179d..603b97e 100644
--- a/gcc/go/gofrontend/gogo-tree.cc
+++ b/gcc/go/gofrontend/gogo-tree.cc
@@ -834,8 +834,15 @@ Gogo::write_globals()
else if (init == NULL_TREE)
;
else if (TREE_CONSTANT(init))
- this->backend()->global_variable_set_init(var,
- tree_to_expr(init));
+ {
+ if (expression_requires(no->var_value()->init(), NULL, no))
+ error_at(no->location(),
+ "initialization expression for %qs depends "
+ "upon itself",
+ no->message_name().c_str());
+ this->backend()->global_variable_set_init(var,
+ tree_to_expr(init));
+ }
else if (is_sink)
var_init_tree = init;
else