Opened 4 years ago

Last modified 4 years ago

#189 closed defect

Reference types allow unsound assignment — at Initial Version

Reported by: mlbrooks Owned by:
Priority: major Component: cfa-cc
Version: 1.0 Keywords:
Cc:

Description

This code implies a reinterpret pointer cast. But the code does not do a cast.

int main() {
    float x = 3.14;
    float & xx = x;
    int & yy = xx;  // not sound
    int y = yy;
    printf("%d\n", y);
}

Expected: Compiler error at "not sound" line, saying cannot initialize int & from float &.

Actual: Compiler success; program prints 1078523331 which is the decimal value of 0x4048f5c3, which is the IEEE 754 representation of 3.14.

Note that this unsoundness also happens at function return.

This allows for:

forall (dtype T, dtype S)
T & anycvt( S & s ) {
    return s; // not sound
}
int main() {
    float x = 3.14;
    int y = anycvt(x);
    printf("%d\n", y);
}

Expected: Compiler error at "not sound" line, saying cannot initialize T & from S &.

Actual: Compiler success; program prints 1078523331.

Change History (0)

Note: See TracTickets for help on using tickets.