Commit 9aea69d6 authored by Martin Möhrmann's avatar Martin Möhrmann Committed by Robert Griesemer

cmd/compile: fix binary import of unsafe.Pointer literals

Add a type conversion to uintptr for untyped constants
before the conversion to unsafe.Pointer.

Fixes #16317

Change-Id: Ib85feccad1019e687e7eb6135890b64b82fb87fb
Reviewed-on: https://go-review.googlesource.com/27441Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
Reviewed-by: default avatarRobert Griesemer <gri@golang.org>
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
parent ee333b4b
......@@ -807,6 +807,11 @@ func (p *importer) node() *Node {
typ := p.typ()
n := nodlit(p.value(typ))
if !typ.IsUntyped() {
if typ.IsUnsafePtr() {
conv := Nod(OCALL, typenod(Types[TUINTPTR]), nil)
conv.List.Set1(n)
n = conv
}
conv := Nod(OCALL, typenod(typ), nil)
conv.List.Set1(n)
n = conv
......
// Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package a
import "unsafe"
func ConstUnsafePointer() unsafe.Pointer {
return unsafe.Pointer(uintptr(0))
}
// Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package main
import "./a"
func main() {
_ = a.ConstUnsafePointer()
}
// compiledir
// Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Issue 16317: cmd/compile: internal compiler error:
// unhandled OCONV INT -> TUNSAFEPTR
package ignored
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment