mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
Regression: Broken type of constant initialized with cast from bitstruct #1811
This commit is contained in:
@@ -9961,7 +9961,9 @@ bool sema_cast_const(Expr *expr)
|
||||
case EXPR_RECAST:
|
||||
if (sema_cast_const(expr->inner_expr))
|
||||
{
|
||||
Type *type = expr->type;
|
||||
expr_replace(expr, expr->inner_expr);
|
||||
expr->type = type;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
||||
19
test/test_suite/cast/cast_rcast.c3
Normal file
19
test/test_suite/cast/cast_rcast.c3
Normal file
@@ -0,0 +1,19 @@
|
||||
module test;
|
||||
// Issue #1811
|
||||
bitstruct Image_Tag : uint
|
||||
{
|
||||
char x1 : 24..31;
|
||||
char x2 : 16..23;
|
||||
char x3 : 8..15;
|
||||
char x4 : 0..7;
|
||||
}
|
||||
|
||||
distinct Glyph_Format = CInt;
|
||||
const Glyph_Format GLYPH_FORMAT_BITMAP = (Glyph_Format)Image_Tag {'b', 'i', 't', 's'};
|
||||
|
||||
fn void main() {
|
||||
// Error: Implicitly casting 'Image_Tag' to 'Glyph_Format' is not permitted
|
||||
Glyph_Format format = GLYPH_FORMAT_BITMAP;
|
||||
// Error: 'Glyph_Format' and 'Image_Tag' are different types and cannot be compared.
|
||||
assert(format == GLYPH_FORMAT_BITMAP);
|
||||
}
|
||||
Reference in New Issue
Block a user