diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2012-02-17 19:27:27 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2012-02-17 19:27:27 +0000 |
commit | 7a6cb708b1a23103a7fab3e3d01b0e3933dc6c4a (patch) | |
tree | b57a8d903111548a327f95b0ba0b3272352346d0 /gcc | |
parent | 061793a4cc6d5e50c8a56a3247e6f8757741cc9a (diff) | |
download | gcc-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.cc | 11 |
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 |