From 2e2b861e8941c4e9b36b88e9c562642b1aba6eaf Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Tue, 8 Feb 2022 20:16:38 -0800 Subject: compiler: use nil pointer for zero length string constant We used to pointlessly set the pointer of a zero length string constant to point to a zero byte constant. Instead, just use nil. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/384354 --- gcc/go/gofrontend/MERGE | 2 +- gcc/go/gofrontend/expressions.cc | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE index 3ea7aed..8cbd0c1 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 d7b6476..3f59765 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 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; -- cgit v1.1