]> Cypherpunks repositories - gostls13.git/commitdiff
bug28
authorKen Thompson <ken@golang.org>
Sat, 29 Mar 2008 23:27:12 +0000 (16:27 -0700)
committerKen Thompson <ken@golang.org>
Sat, 29 Mar 2008 23:27:12 +0000 (16:27 -0700)
fix code generation bug in
second index of string slice.

SVN=114255

src/c/gen.c

index d3f473c10b6cf6a63008a3194bfdbd32516e5926..57dbd84fd48015ecca97d1dfda4c1b97c8d54a70 100644 (file)
@@ -245,7 +245,7 @@ void
 cgen(Node *n)
 {
        long lno;
-       Node *nl, *nr, *r, *r1;
+       Node *nl, *nr, *r;
        int a;
        Prog *p1, *p2, *p3;
 
@@ -358,21 +358,14 @@ cgen(Node *n)
                break;
 
        case OSLICE:
-               nl = n->left;
+               nl = n->left;   // name
                nr = n->right;
 
-               r = nr->left;
-               if(usesptr(nr->left)) {
-                       cgen(nr->left);
-                       r = tempname(nr->left->type);
-                       gopcodet(PSTORE, nr->left->type, r);
-               }
-
-               r1 = nr->right;
-               if(!nr->right->addable) {
-                       cgen(nr->right);
-                       r1 = tempname(nr->right->type);
-                       gopcodet(PSTORE, nr->right->type, r1);
+               r = nr->right;  // index2
+               if(!r->addable) {
+                       cgen(r);
+                       r = tempname(r->type);
+                       gopcodet(PSTORE, r->type, r);
                }
 
                // string into PTADDR
@@ -385,8 +378,8 @@ cgen(Node *n)
                // offset in int reg
                cgen(nr->left);
 
-               // len addressed
-               gopcodet(PSLICE, nr->left->type, nr->right);
+               // index 2 addressed
+               gopcodet(PSLICE, r->type, r);
                break;
 
        case OINDEXPTR: