From 6e436286338333f42a87c418764476baf456740c Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Thu, 22 Jan 2015 17:11:36 +0000 Subject: [PATCH] compiler: Avoid infinite recursion when describing initialization loops. Fixes infinite recursion from golang/go#7558. From-SVN: r220009 --- gcc/go/gofrontend/gogo.cc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/gcc/go/gofrontend/gogo.cc b/gcc/go/gofrontend/gogo.cc index 7bc54fcd658..252560d9e35 100644 --- a/gcc/go/gofrontend/gogo.cc +++ b/gcc/go/gofrontend/gogo.cc @@ -1089,6 +1089,7 @@ sort_var_inits(Gogo* gogo, Var_inits* var_inits) // variable initializations that depend on it. typedef std::map > Init_deps; Init_deps init_deps; + bool init_loop = false; for (Var_inits::iterator p1 = var_inits->begin(); p1 != var_inits->end(); ++p1) @@ -1137,14 +1138,15 @@ sort_var_inits(Gogo* gogo, Var_inits* var_inits) p2var->message_name().c_str()); inform(p2->var()->location(), "%qs defined here", p2var->message_name().c_str()); - p2 = var_inits->end(); + init_loop = true; + break; } } } } // If there are no dependencies then the declaration order is sorted. - if (!init_deps.empty()) + if (!init_deps.empty() && !init_loop) { // Otherwise, sort variable initializations by emitting all variables with // no dependencies in declaration order. VAR_INITS is already in -- 2.30.2