This patch by Chris Manghane fixes the Go frontend so that when moving
expressions to ensure that they are evaluated in the correct order, it
does not bother to move a constant expression.  This fixes
https://golang.org/issue/11039 .  Bootstrapped and ran Go testsuite on
x86_64-unknown-linux-gnu.  Committed to mainline.

Ian
Index: gcc/go/gofrontend/MERGE
===================================================================
--- gcc/go/gofrontend/MERGE     (revision 226123)
+++ gcc/go/gofrontend/MERGE     (working copy)
@@ -1,4 +1,4 @@
-cbb27e8089e11094a20502e53ef69c9c36955f85
+ac462880e803a926005f1756b0f8d82ff0c47499
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
Index: gcc/go/gofrontend/statements.cc
===================================================================
--- gcc/go/gofrontend/statements.cc     (revision 225750)
+++ gcc/go/gofrontend/statements.cc     (working copy)
@@ -689,7 +689,8 @@ Move_subexpressions::expression(Expressi
   if (this->skip_ > 0)
     --this->skip_;
   else if ((*pexpr)->temporary_reference_expression() == NULL
-          && !(*pexpr)->is_nil_expression())
+          && !(*pexpr)->is_nil_expression()
+           && !(*pexpr)->is_constant())
     {
       Location loc = (*pexpr)->location();
       Temporary_statement* temp = Statement::make_temporary(NULL, *pexpr, loc);

Reply via email to