| author | |
| committer | |
| log | 53e41682bac1c6294cad12e2cc7daf37406cf827 |
| tree | 95adbe94f4962af66894064ad975cadbbec75b56 |
| parent | 3542dcad33f5e2021caeb897857b7cc3a57f2c23 |
Fixes #103563 files changed, 22 insertions(+), 5 deletions(-)
src/translate_c.zig+11-4| ... | @@ -4824,11 +4824,18 @@ fn qualTypeWasDemotedToOpaque(c: *Context, qt: clang.QualType) bool { | ... | @@ -4824,11 +4824,18 @@ fn qualTypeWasDemotedToOpaque(c: *Context, qt: clang.QualType) bool { |
| 4824 | 4824 | ||
| 4825 | fn isAnyopaque(qt: clang.QualType) bool { | 4825 | fn isAnyopaque(qt: clang.QualType) bool { |
| 4826 | const ty = qt.getTypePtr(); | 4826 | const ty = qt.getTypePtr(); |
| 4827 | if (ty.getTypeClass() == .Builtin) { | 4827 | switch (ty.getTypeClass()) { |
| 4828 | const builtin_ty = @ptrCast(*const clang.BuiltinType, ty); | 4828 | .Builtin => { |
| 4829 | return builtin_ty.getKind() == .Void; | 4829 | const builtin_ty = @ptrCast(*const clang.BuiltinType, ty); |
| 4830 | return builtin_ty.getKind() == .Void; | ||
| 4831 | }, | ||
| 4832 | .Typedef => { | ||
| 4833 | const typedef_ty = @ptrCast(*const clang.TypedefType, ty); | ||
| 4834 | const typedef_decl = typedef_ty.getDecl(); | ||
| 4835 | return isAnyopaque(typedef_decl.getUnderlyingType()); | ||
| 4836 | }, | ||
| 4837 | else => return false, | ||
| 4830 | } | 4838 | } |
| 4831 | return false; | ||
| 4832 | } | 4839 | } |
| 4833 | 4840 | ||
| 4834 | const FnDeclContext = struct { | 4841 | const FnDeclContext = struct { |
test/run_translated_c.zig+10| ... | @@ -1809,4 +1809,14 @@ pub fn addCases(cases: *tests.RunTranslatedCContext) void { | ... | @@ -1809,4 +1809,14 @@ pub fn addCases(cases: *tests.RunTranslatedCContext) void { |
| 1809 | \\ return 0; | 1809 | \\ return 0; |
| 1810 | \\} | 1810 | \\} |
| 1811 | , ""); | 1811 | , ""); |
| 1812 | |||
| 1813 | cases.add("Typedef'ed void used as return type. Issue #10356", | ||
| 1814 | \\typedef void V; | ||
| 1815 | \\V foo(V *f) {} | ||
| 1816 | \\int main(void) { | ||
| 1817 | \\ int x = 0; | ||
| 1818 | \\ foo(&x); | ||
| 1819 | \\ return 0; | ||
| 1820 | \\} | ||
| 1821 | , ""); | ||
| 1812 | } | 1822 | } |
test/translate_c.zig+1-1| ... | @@ -814,7 +814,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { | ... | @@ -814,7 +814,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 814 | , &[_][]const u8{ | 814 | , &[_][]const u8{ |
| 815 | \\pub const Foo = anyopaque; | 815 | \\pub const Foo = anyopaque; |
| 816 | , | 816 | , |
| 817 | \\pub extern fn fun(a: ?*Foo) Foo; | 817 | \\pub extern fn fun(a: ?*Foo) void; |
| 818 | }); | 818 | }); |
| 819 | 819 | ||
| 820 | cases.add("duplicate typedef", | 820 | cases.add("duplicate typedef", |