diff options
| author | Evan Haas <evan@lagerdata.com> | 2023-08-15 22:37:58 -0700 |
|---|---|---|
| committer | Evan Haas <evan@lagerdata.com> | 2023-08-15 23:59:07 -0700 |
| commit | 49cb1683ff1f87c3a9af0b564de0aa7a5b4daf7d (patch) | |
| tree | 33a4ef48eb21d006ffe3897f37dd9178d44bef57 /src | |
| parent | bdf5739c0a982d24a722b625a660a15bef617ce9 (diff) | |
| download | zig-49cb1683ff1f87c3a9af0b564de0aa7a5b4daf7d.tar.gz zig-49cb1683ff1f87c3a9af0b564de0aa7a5b4daf7d.zip | |
translate-c: Use canonical type of field for flexible array definition
This prevents incorrectly casting an ElaboratedType to ArrayType
if the flexible field is a typedef'ed zero-length array
Fixes #16838
Diffstat (limited to 'src')
| -rw-r--r-- | src/translate_c.zig | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/translate_c.zig b/src/translate_c.zig index b28ee14771..93c85ab8bd 100644 --- a/src/translate_c.zig +++ b/src/translate_c.zig @@ -965,6 +965,7 @@ fn buildFlexibleArrayFn( field_decl: *const clang.FieldDecl, ) TypeError!Node { const field_qt = field_decl.getType(); + const field_qt_canon = qualTypeCanon(field_qt); const u8_type = try Tag.type.create(c.arena, "u8"); const self_param_name = "self"; @@ -979,7 +980,7 @@ fn buildFlexibleArrayFn( .is_noalias = false, }; - const array_type = @as(*const clang.ArrayType, @ptrCast(field_qt.getTypePtr())); + const array_type = @as(*const clang.ArrayType, @ptrCast(field_qt_canon)); const element_qt = array_type.getElementType(); const element_type = try transQualType(c, scope, element_qt, field_decl.getLocation()); |
