Changeset 5210


Ignore:
Timestamp:
Mar 14, 2010 11:20:57 PM (3 years ago)
Author:
oxygene
Message:

Fix segfault of romcc when complex assignment operators
were applied to non-trivial LHSs, eg. c[4] |= 1;

Signed-off-by: Patrick Georgi <patrick.georgi@…>
Acked-by: Stefan Reinauer <stepan@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/util/romcc/romcc.c

    r5172 r5210  
    18971897        if (!user) 
    18981898                return; 
    1899         ptr = &used->use; 
    1900         while(*ptr) { 
    1901                 if ((*ptr)->member == user) { 
    1902                         return; 
    1903                 } 
    1904                 ptr = &(*ptr)->next; 
     1899        if (used->use == (void*)-1) 
     1900                used->use = 0; 
     1901        if (used->use) { 
     1902                ptr = &used->use; 
     1903                while(*ptr) { 
     1904                        if ((*ptr)->member == user) { 
     1905                                return; 
     1906                        } 
     1907                        ptr = &(*ptr)->next; 
     1908                } 
    19051909        } 
    19061910        /* Append new to the head of the list,  
     
    1160011604                def = write_expr(state, left, 
    1160111605                        triple(state, op, left->type,  
    11602                                 read_expr(state, left), right)); 
     11606                                read_expr(state, copy_triple(state, left)), right)); 
    1160311607                break; 
    1160411608        case TOK_PLUSEQ: 
     
    1160611610                eat(state, TOK_PLUSEQ); 
    1160711611                def = write_expr(state, left, 
    11608                         mk_add_expr(state, left, assignment_expr(state))); 
     11612                        mk_add_expr(state, copy_triple(state, left), assignment_expr(state))); 
    1160911613                break; 
    1161011614        case TOK_MINUSEQ: 
     
    1161211616                eat(state, TOK_MINUSEQ); 
    1161311617                def = write_expr(state, left, 
    11614                         mk_sub_expr(state, left, assignment_expr(state))); 
     11618                        mk_sub_expr(state, copy_triple(state, left), assignment_expr(state))); 
    1161511619                break; 
    1161611620        case TOK_SLEQ: 
     
    1163611640                def = write_expr(state, left, 
    1163711641                        triple(state, op, left->type,  
    11638                                 read_expr(state, left), right)); 
     11642                                read_expr(state, copy_triple(state,left)), right)); 
    1163911643                break; 
    1164011644        } 
Note: See TracChangeset for help on using the changeset viewer.