// run | |
// Copyright 2019 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. | |
// Values smaller than 64-bits were mistakenly always proven to be | |
// non-negative. | |
// | |
// The tests here are marked go:noinline to ensure they're | |
// independently optimized by SSA. | |
package main | |
var x int32 = -1 | |
//go:noinline | |
func a() { | |
if x != -1 { | |
panic(1) | |
} | |
if x > 0 || x != -1 { | |
panic(2) | |
} | |
} | |
//go:noinline | |
func b() { | |
if x != -1 { | |
panic(3) | |
} | |
if x > 0 { | |
panic(4) | |
} | |
} | |
//go:noinline | |
func c() { | |
if x > 0 || x != -1 { | |
panic(5) | |
} | |
if x > 0 || x != -1 { | |
panic(6) | |
} | |
} | |
func main() { | |
a() | |
b() | |
c() | |
} |