From 0218dfe7eb4afded4614a51d03bfedfec995378d Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Mon, 9 Sep 2013 13:11:41 -0400 Subject: [PATCH] cmd/gc: allow inlined struct == to mention unsafe.Pointer even in safe mode Fixes #5578. R=ken2 CC=golang-dev https://golang.org/cl/13417044 --- src/cmd/gc/walk.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/cmd/gc/walk.c b/src/cmd/gc/walk.c index e539d25d32..b170d6e387 100644 --- a/src/cmd/gc/walk.c +++ b/src/cmd/gc/walk.c @@ -340,7 +340,7 @@ walkexpr(Node **np, NodeList **init) Node *r, *l, *var, *a; NodeList *ll, *lr, *lpost; Type *t; - int et; + int et, old_safemode; int64 v; int32 lno; Node *n, *fn, *n1, *n2; @@ -488,7 +488,15 @@ walkexpr(Node **np, NodeList **init) case ONE: walkexpr(&n->left, init); walkexpr(&n->right, init); + // Disable safemode while compiling this code: the code we + // generate internally can refer to unsafe.Pointer. + // In this case it can happen if we need to generate an == + // for a struct containing a reflect.Value, which itself has + // an unexported field of type unsafe.Pointer. + old_safemode = safemode; + safemode = 0; walkcompare(&n, init); + safemode = old_safemode; goto ret; case OANDAND: -- 2.50.0