aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEvan Haas <evan@lagerdata.com>2023-08-15 22:37:58 -0700
committerEvan Haas <evan@lagerdata.com>2023-08-15 23:59:07 -0700
commit49cb1683ff1f87c3a9af0b564de0aa7a5b4daf7d (patch)
tree33a4ef48eb21d006ffe3897f37dd9178d44bef57 /src
parentbdf5739c0a982d24a722b625a660a15bef617ce9 (diff)
downloadzig-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.zig3
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());