aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEvan Haas <evan@lagerdata.com>2022-01-10 11:54:11 -0800
committerAndrew Kelley <andrew@ziglang.org>2022-01-11 12:42:23 -0500
commitf4b3f1d6022265992f87cea1d9591ffa8ec226d6 (patch)
tree25813410d61efaaf1520ddf31edb362ef2f0bb18 /src
parent6d9c02a54fc847e9bed3096f910e03babec63acb (diff)
downloadzig-f4b3f1d6022265992f87cea1d9591ffa8ec226d6.tar.gz
zig-f4b3f1d6022265992f87cea1d9591ffa8ec226d6.zip
translate-c: Handle typedef'ed void return type for functions.
Fixes #10356
Diffstat (limited to 'src')
-rw-r--r--src/translate_c.zig15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/translate_c.zig b/src/translate_c.zig
index 4d993e62ea..971551fb69 100644
--- a/src/translate_c.zig
+++ b/src/translate_c.zig
@@ -4824,11 +4824,18 @@ fn qualTypeWasDemotedToOpaque(c: *Context, qt: clang.QualType) bool {
fn isAnyopaque(qt: clang.QualType) bool {
const ty = qt.getTypePtr();
- if (ty.getTypeClass() == .Builtin) {
- const builtin_ty = @ptrCast(*const clang.BuiltinType, ty);
- return builtin_ty.getKind() == .Void;
+ switch (ty.getTypeClass()) {
+ .Builtin => {
+ const builtin_ty = @ptrCast(*const clang.BuiltinType, ty);
+ return builtin_ty.getKind() == .Void;
+ },
+ .Typedef => {
+ const typedef_ty = @ptrCast(*const clang.TypedefType, ty);
+ const typedef_decl = typedef_ty.getDecl();
+ return isAnyopaque(typedef_decl.getUnderlyingType());
+ },
+ else => return false,
}
- return false;
}
const FnDeclContext = struct {