lcc icon indicating copy to clipboard operation
lcc copied to clipboard

Fixed assertion failure on assignment to unsigned bitfields

Open mycoboco opened this issue 10 years ago • 0 comments

Trying to assign a struct to a unsigned bitfield triggers an assertion failure. For example, given this:

void f(void)
{
    struct { int foo:3; } x;
    struct { unsigned foo:3; } y;

    x.foo = x;
    y.foo = y;    /* line A */
}

lcc terminates saying:

6: operands of = have illegal types `int' and `struct defined at 3'
6: operands of << have illegal types `struct defined at 3' and `int'
7: operands of = have illegal types `unsigned int' and `struct defined at 4'
rcc: src/enode.c:192: cnsttree: Assertion `0' failed.
Aborted

This is because, unlike an assignment to signed bitfield, an assignment to unsigned one assumes that the type of its right operand has a type from which cnsttree() can generate a constant.

mycoboco avatar Feb 03 '15 11:02 mycoboco