compiler: Check for initialization loop in constant initializer.
authorIan Lance Taylor <ian@gcc.gnu.org>
Fri, 17 Feb 2012 19:27:27 +0000 (19:27 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Fri, 17 Feb 2012 19:27:27 +0000 (19:27 +0000)
From-SVN: r184347

gcc/go/gofrontend/gogo-tree.cc

index 352179df02ab0dc8a6ddf82290f26c5d05d2cc8b..603b97ec0c1e89a7fa2f3602cefd191852d4c9a9 100644 (file)
@@ -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