compiler: no nil check needed for closure var dereferences
authorIan Lance Taylor <ian@gcc.gnu.org>
Tue, 5 Dec 2017 02:03:19 +0000 (02:03 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Tue, 5 Dec 2017 02:03:19 +0000 (02:03 +0000)
    Add 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).

    Reviewed-on: https://go-review.googlesource.com/81795

From-SVN: r255400

gcc/go/gofrontend/MERGE
gcc/go/gofrontend/parse.cc

index ecb38ee..e0d606c 100644 (file)
@@ -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 be6f3f1..98f3067 100644 (file)
@@ -2747,7 +2747,7 @@ Parse::enclosing_var_reference(Named_object* in_function, Named_object* var,
                                                           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_object* in_function, Named_object* var,
   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);
 }