From f840368602ba6e9cf46b9572bc8000a6c88a041d Mon Sep 17 00:00:00 2001 From: ian Date: Sat, 28 Sep 2019 00:16:57 +0000 Subject: [PATCH] compiler: resolve importing ambiguity for more complex function calls Tweak the exporter for inlinable function bodies to work around a problem with importing of function calls whose function expressions are not simple function names. In the bug in question, the function body exporter was writing out a function call of the form (*(*FuncTyp)(var))(arg) which produced an export data representation of *$convert(, var)(x) which is hard to parse unambiguously. Fix: change the export data emitter to introduce parens around the function expression for more complex calls. Testcase for this bug is in CL 197217. Fixes golang/go#34503. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/197122 git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@276228 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/go/gofrontend/MERGE | 2 +- gcc/go/gofrontend/expressions.cc | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE index 1e6ca6fa5dd9..3f2c3dcdd0e5 100644 --- a/gcc/go/gofrontend/MERGE +++ b/gcc/go/gofrontend/MERGE @@ -1,4 +1,4 @@ -9112ea664ed9ee5f108158a913812adaf03edf6e +10a1671d94ddc0c39f2f4b039e5ea33358f414c0 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 7d8963e2c0be..a72ba243f376 100644 --- a/gcc/go/gofrontend/expressions.cc +++ b/gcc/go/gofrontend/expressions.cc @@ -12373,7 +12373,12 @@ Call_expression::do_inlining_cost() const void Call_expression::do_export(Export_function_body* efb) const { + bool simple_call = (this->fn_->func_expression() != NULL); + if (!simple_call) + efb->write_c_string("("); this->fn_->export_expression(efb); + if (!simple_call) + efb->write_c_string(")"); this->export_arguments(efb); } -- 2.47.2