Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixed assertion failure on assignment to unsigned bitfields #17

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

mycoboco
Copy link

@mycoboco mycoboco commented Feb 3, 2015

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant