Commit 03a1dc35 authored by Matthew Dempsky's avatar Matthew Dempsky

cmd/compile: don't crash on (unsafe.Sizeof)(0)

Fixes #17270.

Change-Id: I4affa57e10baf1a758bc0977265d160f220b2945
Reviewed-on: https://go-review.googlesource.com/29960
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
parent 4d07d3e2
......@@ -1185,11 +1185,12 @@ OpSwitch:
// call and call like
case OCALL:
n.Left = typecheck(n.Left, Erv|Etype|Ecall)
n.Diag |= n.Left.Diag
l := n.Left
if l.Op == ONAME {
r := unsafenmagic(n)
if r != nil {
if r := unsafenmagic(n); r != nil {
if n.Isddd {
yyerror("invalid use of ... with builtin %v", l)
}
......@@ -1197,25 +1198,22 @@ OpSwitch:
n = typecheck1(n, top)
return n
}
}
n.Left = typecheck(n.Left, Erv|Etype|Ecall)
n.Diag |= n.Left.Diag
l = n.Left
if l.Op == ONAME && l.Etype != 0 {
// TODO(marvin): Fix Node.EType type union.
if n.Isddd && Op(l.Etype) != OAPPEND {
yyerror("invalid use of ... with builtin %v", l)
}
if l.Etype != 0 {
// TODO(marvin): Fix Node.EType type union.
if n.Isddd && Op(l.Etype) != OAPPEND {
yyerror("invalid use of ... with builtin %v", l)
}
// builtin: OLEN, OCAP, etc.
// TODO(marvin): Fix Node.EType type union.
n.Op = Op(l.Etype)
// builtin: OLEN, OCAP, etc.
// TODO(marvin): Fix Node.EType type union.
n.Op = Op(l.Etype)
n.Left = n.Right
n.Right = nil
n = typecheck1(n, top)
return n
n.Left = n.Right
n.Right = nil
n = typecheck1(n, top)
return n
}
}
n.Left = defaultlit(n.Left, nil)
......
// compile
// 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 p
import "unsafe"
const _ = (unsafe.Sizeof)(0)
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