From e1c5d179d6e84f6b5e218e216a583c6845cb6b53 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Fri, 21 Aug 2009 17:54:07 -0700 Subject: [PATCH] fix crash in bug194; add bug196 R=ken OCL=33694 CL=33697 --- src/cmd/gc/const.c | 4 ++-- test/bugs/bug196.go | 49 +++++++++++++++++++++++++++++++++++++++++++++ test/golden.out | 7 ++++++- 3 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 test/bugs/bug196.go diff --git a/src/cmd/gc/const.c b/src/cmd/gc/const.c index 80ba7f91dd..6beacab6d1 100644 --- a/src/cmd/gc/const.c +++ b/src/cmd/gc/const.c @@ -846,7 +846,7 @@ cmpslit(Node *l, Node *r) int smallintconst(Node *n) { - if(n->op == OLITERAL) + if(n->op == OLITERAL && n->type != T) switch(simtype[n->type->etype]) { case TINT8: case TUINT8: @@ -864,7 +864,7 @@ smallintconst(Node *n) long nonnegconst(Node *n) { - if(n->op == OLITERAL) + if(n->op == OLITERAL && n->type != T) switch(simtype[n->type->etype]) { case TINT8: case TUINT8: diff --git a/test/bugs/bug196.go b/test/bugs/bug196.go new file mode 100644 index 0000000000..0aa055010a --- /dev/null +++ b/test/bugs/bug196.go @@ -0,0 +1,49 @@ +// $G $D/$F.go && $L $F.$A && ./$A.out || echo BUG: bug196 + +// Copyright 2009 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 + +var m = map[int]int{ 0: 0, 1: 0 } +var nf = 0 +var i int + +func multi() (int, int) { + return 1,2 +} + +func xxx() { + var c chan int; + x, ok := <-c; + + var m map[int]int; + x, ok = m[1]; + + var i interface{}; + var xx int; + xx, ok = i.(int); + + a,b := multi(); +} + +func f() map[int]int { + nf++; + return m; +} + +func g() *int { + nf++; + return &i +} + +func main() { + f()[0]++; + f()[1] += 2; + *g() %= 2; + if nf != 3 { + panicln("too many calls:", nf); + } + +} diff --git a/test/golden.out b/test/golden.out index 207313f590..2ccd4cf057 100644 --- a/test/golden.out +++ b/test/golden.out @@ -175,8 +175,13 @@ bugs/bug193.go:13: fatal error: optoas: no entry LSH-float errchk: bugs/bug193.go:14: missing expected error: 'shift' =========== bugs/bug194.go +bugs/bug194.go:15: array index must be non-negative integer constant BUG should compile and run -$RUNFILE: line 1: PID Segmentation fault (core dumped) $G $D/$F.go =========== bugs/bug195.go bugs/bug195.go:9: BUG: errchk: compiler crashed + +=========== bugs/bug196.go +too many calls: 5 +panic PC=xxx +BUG: bug196 -- 2.48.1