mirror of
https://github.com/golang/go
synced 2024-11-21 14:34:41 -07:00
code gen bug in len(nil) and cap(nil)
fixes #892 R=rsc CC=golang-dev https://golang.org/cl/1745042
This commit is contained in:
parent
00ad47f906
commit
1246ad8390
@ -1137,6 +1137,8 @@ naddr(Node *n, Addr *a, int canemitcode)
|
||||
case OLEN:
|
||||
// len of string or slice
|
||||
naddr(n->left, a, canemitcode);
|
||||
if(a->type == D_CONST && a->offset == 0)
|
||||
break; // len(nil)
|
||||
a->offset += Array_nel;
|
||||
if(a->offset >= unmappedzero && a->offset-Array_nel < unmappedzero)
|
||||
checkoffset(a, canemitcode);
|
||||
@ -1145,6 +1147,8 @@ naddr(Node *n, Addr *a, int canemitcode)
|
||||
case OCAP:
|
||||
// cap of string or slice
|
||||
naddr(n->left, a, canemitcode);
|
||||
if(a->type == D_CONST && a->offset == 0)
|
||||
break; // cap(nil)
|
||||
a->offset += Array_cap;
|
||||
if(a->offset >= unmappedzero && a->offset-Array_cap < unmappedzero)
|
||||
checkoffset(a, canemitcode);
|
||||
|
@ -1079,6 +1079,8 @@ naddr(Node *n, Addr *a, int canemitcode)
|
||||
case OLEN:
|
||||
// len of string or slice
|
||||
naddr(n->left, a, canemitcode);
|
||||
if(a->type == D_CONST && a->offset == 0)
|
||||
break; // len(nil)
|
||||
a->etype = TUINT;
|
||||
a->offset += Array_nel;
|
||||
if(a->offset >= unmappedzero && a->offset-Array_nel < unmappedzero)
|
||||
@ -1088,6 +1090,8 @@ naddr(Node *n, Addr *a, int canemitcode)
|
||||
case OCAP:
|
||||
// cap of string or slice
|
||||
naddr(n->left, a, canemitcode);
|
||||
if(a->type == D_CONST && a->offset == 0)
|
||||
break; // cap(nil)
|
||||
a->etype = TUINT;
|
||||
a->offset += Array_cap;
|
||||
if(a->offset >= unmappedzero && a->offset-Array_cap < unmappedzero)
|
||||
|
@ -1789,6 +1789,8 @@ naddr(Node *n, Addr *a, int canemitcode)
|
||||
case OLEN:
|
||||
// len of string or slice
|
||||
naddr(n->left, a, canemitcode);
|
||||
if(a->type == D_CONST && a->offset == 0)
|
||||
break; // len(nil)
|
||||
a->etype = TUINT;
|
||||
a->offset += Array_nel;
|
||||
if(a->offset >= unmappedzero && a->offset-Array_nel < unmappedzero)
|
||||
@ -1798,6 +1800,8 @@ naddr(Node *n, Addr *a, int canemitcode)
|
||||
case OCAP:
|
||||
// cap of string or slice
|
||||
naddr(n->left, a, canemitcode);
|
||||
if(a->type == D_CONST && a->offset == 0)
|
||||
break; // cap(nil)
|
||||
a->etype = TUINT;
|
||||
a->offset += Array_cap;
|
||||
if(a->offset >= unmappedzero && a->offset-Array_nel < unmappedzero)
|
||||
|
Loading…
Reference in New Issue
Block a user