Changeset 5210


Ignore:
Timestamp:
Mar 14, 2010, 11:20:57 PM (5 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.