diff mbox series

Go patch committed: Omit nil check when dereferencing closure variable

Message ID CAOyqgcWGVa3T=Ap0GjHQp0HJUX7tp71J5Hwxx5d1HKXXyK015w@mail.gmail.com
State New
Headers show
Series Go patch committed: Omit nil check when dereferencing closure variable | expand

Commit Message

Ian Lance Taylor Dec. 5, 2017, 2:03 a.m. UTC
This patch to the Go frontend by Than McIntosh adds the "no nil check
needed" annotation to the dereference operations created in
Parse::enclosing_var_reference (this is safe since the closure object
is under control of the compiler, and pointer fields in it will always
be non-nil).  Bootstrapped and ran Go testsuite on
x86_64-pc-linux-gnu.  Committed to mainline.

Ian
diff mbox series

Patch

Index: gcc/go/gofrontend/MERGE
===================================================================
--- gcc/go/gofrontend/MERGE	(revision 255347)
+++ gcc/go/gofrontend/MERGE	(working copy)
@@ -1,4 +1,4 @@ 
-338f7434175bb71f3c8905e9ad7f480aec3afee6
+297cf346f2400274946650ab9ecd039427fc986b
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
Index: gcc/go/gofrontend/parse.cc
===================================================================
--- gcc/go/gofrontend/parse.cc	(revision 255340)
+++ gcc/go/gofrontend/parse.cc	(working copy)
@@ -2747,7 +2747,7 @@  Parse::enclosing_var_reference(Named_obj
 							   location);
   closure_ref =
       Expression::make_dereference(closure_ref,
-                                   Expression::NIL_CHECK_DEFAULT,
+                                   Expression::NIL_CHECK_NOT_NEEDED,
                                    location);
 
   // The closure structure holds pointers to the variables, so we need
@@ -2755,7 +2755,8 @@  Parse::enclosing_var_reference(Named_obj
   Expression* e = Expression::make_field_reference(closure_ref,
 						   ins.first->index(),
 						   location);
-  e = Expression::make_dereference(e, Expression::NIL_CHECK_DEFAULT, location);
+  e = Expression::make_dereference(e, Expression::NIL_CHECK_NOT_NEEDED,
+                                   location);
   return Expression::make_enclosing_var_reference(e, var, location);
 }