Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 02effee6 authored by Jack Palevich's avatar Jack Palevich
Browse files

Correctly compute the type of an assignment expression.

This change enables following types of statements to work correctly:

    a = b = 3;
    if ((a = getchar()) < 0) { ... }

This fixes 2232082 acc: assignment in comparison segfaults
parent f6eba8fa
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -1666,6 +1666,7 @@ class Compiler : public ErrorSink {
                            pDestType->tag);
                    break;
            }
            setR0Type(pDestType);
        }

        virtual void loadR0FromR0() {
@@ -2836,6 +2837,7 @@ class Compiler : public ErrorSink {
                            pTargetType->tag);
                    break;
            }
            setR0Type(pTargetType);
        }

        virtual void loadR0FromR0() {
+9 −0
Original line number Diff line number Diff line
int main() {
    int a = 0;
    int b = 1;
    a = b = 2; // Test that "b = 2" generates an rvalue.
    if (a = 7) { // Test that a = 7 generates an rvalue.
        b = 3;
    }
    return a;
}
+5 −0
Original line number Diff line number Diff line
@@ -424,6 +424,11 @@ result: 0
    def testShort(self):
        self.compileCheck(["-R", "data/short.c"], """Executing compiled code:
result: -2
""","""""")

    def testAssignment(self):
        self.compileCheck(["-R", "data/assignment.c"], """Executing compiled code:
result: 7
""","""""")

    def testArray(self):