From 3a2d64789bb661bc5d2e27df30c3e3560bad6a03 Mon Sep 17 00:00:00 2001 From: "Jeff R. Allen" Date: Wed, 16 Feb 2011 17:57:15 -0500 Subject: [PATCH] gc: make string const comparison unsigned Make compile-time string const comparison match semantics of runtime.cmpstring. Fixes #1515. R=rsc CC=golang-dev, rog https://golang.org/cl/4172049 --- src/cmd/gc/const.c | 6 +++--- test/fixedbugs/bug1515.go | 20 ++++++++++++++++++++ 2 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 test/fixedbugs/bug1515.go diff --git a/src/cmd/gc/const.c b/src/cmd/gc/const.c index 0ee693c025b..a54c40f6cc2 100644 --- a/src/cmd/gc/const.c +++ b/src/cmd/gc/const.c @@ -1051,12 +1051,12 @@ int cmpslit(Node *l, Node *r) { int32 l1, l2, i, m; - char *s1, *s2; + uchar *s1, *s2; l1 = l->val.u.sval->len; l2 = r->val.u.sval->len; - s1 = l->val.u.sval->s; - s2 = r->val.u.sval->s; + s1 = (uchar*)l->val.u.sval->s; + s2 = (uchar*)r->val.u.sval->s; m = l1; if(l2 < m) diff --git a/test/fixedbugs/bug1515.go b/test/fixedbugs/bug1515.go new file mode 100644 index 00000000000..7402525164f --- /dev/null +++ b/test/fixedbugs/bug1515.go @@ -0,0 +1,20 @@ +// $G $D/$F.go && $L $F.$A && ./$A.out + +// Copyright 2011 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 + +const ( + joao = "João" + jose = "José" +) + +func main() { + s1 := joao + s2 := jose + if (s1 < s2) != (joao < jose) { + panic("unequal") + } +}