diff mbox series

Go patch committed: Use nil pointer for zero length string constant

Message ID CAOyqgcV82Hua4Ew9wusjK_T2UVtZXp56sEfgyUnbz_Z+6aFx6A@mail.gmail.com
State New
Headers show
Series Go patch committed: Use nil pointer for zero length string constant | expand

Commit Message

Ian Lance Taylor Feb. 9, 2022, 10:14 p.m. UTC
This patch to the Go frontend uses a nil pointer for a zero length
string constant.  We used to pointlessly set the pointer of a zero
length string constant to point to a zero byte constant.  Bootstrapped
and ran Go testsuite on x86_64-pc-linux-gnu.  Committed to mainline.

Ian
2e2b861e8941c4e9b36b88e9c562642b1aba6eaf
diff mbox series

Patch

diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE
index 3ea7aed3506..8cbd0c19a8d 100644
--- a/gcc/go/gofrontend/MERGE
+++ b/gcc/go/gofrontend/MERGE
@@ -1,4 +1,4 @@ 
-7dffb933d33ff288675c8094d05c31b35cbf7e4d
+263e8d2a2ab57c6f2b3035f370d40476bda87c9f
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc
index d7b64767a00..3f597654858 100644
--- a/gcc/go/gofrontend/expressions.cc
+++ b/gcc/go/gofrontend/expressions.cc
@@ -2123,9 +2123,15 @@  String_expression::do_get_backend(Translate_context* context)
 
   Location loc = this->location();
   std::vector<Bexpression*> init(2);
-  Bexpression* str_cst =
-      gogo->backend()->string_constant_expression(this->val_);
-  init[0] = gogo->backend()->address_expression(str_cst, loc);
+
+  if (this->val_.size() == 0)
+    init[0] = gogo->backend()->nil_pointer_expression();
+  else
+    {
+      Bexpression* str_cst =
+	gogo->backend()->string_constant_expression(this->val_);
+      init[0] = gogo->backend()->address_expression(str_cst, loc);
+    }
 
   Btype* int_btype = Type::lookup_integer_type("int")->get_backend(gogo);
   mpz_t lenval;