aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/go/gofrontend/MERGE2
-rw-r--r--gcc/go/gofrontend/gogo.cc2
-rw-r--r--gcc/testsuite/go.go-torture/execute/printnil.go19
3 files changed, 21 insertions, 2 deletions
diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE
index c115b2e..7dc0063 100644
--- a/gcc/go/gofrontend/MERGE
+++ b/gcc/go/gofrontend/MERGE
@@ -1,4 +1,4 @@
-65eaa9003db4effc9c5ffe9c955e9534ba5d7d15
+71758f9ca1804743afe178f0e2fca489e0217474
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/gogo.cc b/gcc/go/gofrontend/gogo.cc
index 3f784dd..04edb08 100644
--- a/gcc/go/gofrontend/gogo.cc
+++ b/gcc/go/gofrontend/gogo.cc
@@ -5610,7 +5610,7 @@ Function::build(Gogo* gogo, Named_object* named_function)
Expression::make_var_reference(parm_no, loc);
parm_ref =
Expression::make_dereference(parm_ref,
- Expression::NIL_CHECK_DEFAULT,
+ Expression::NIL_CHECK_NEEDED,
loc);
if ((*p)->var_value()->is_in_heap())
parm_ref = Expression::make_heap_expression(parm_ref, loc);
diff --git a/gcc/testsuite/go.go-torture/execute/printnil.go b/gcc/testsuite/go.go-torture/execute/printnil.go
new file mode 100644
index 0000000..9b72dd4
--- /dev/null
+++ b/gcc/testsuite/go.go-torture/execute/printnil.go
@@ -0,0 +1,19 @@
+// printnil checks that fmt correctly handles a nil pointer receiver
+// for a value method at all optimization levels.
+package main
+
+import "fmt"
+
+type MyType struct {
+ val int
+}
+
+func (t MyType) String() string {
+ return "foobar"
+}
+
+func main() {
+ if got := fmt.Sprintf("%s", (*MyType)(nil)); got != "<nil>" {
+ panic(got)
+ }
+}