translate-c tests
This commit is contained in:
parent
0ec64d4c0c
commit
08a26fea09
@ -4104,7 +4104,7 @@ fn finishTransFnProto(
|
|||||||
|
|
||||||
const rparen_tok = try appendToken(rp.c, .RParen, ")");
|
const rparen_tok = try appendToken(rp.c, .RParen, ")");
|
||||||
|
|
||||||
const callconv_expr = if (cc == .C and is_extern) null else blk: {
|
const callconv_expr = if (extern_export_inline_tok != null) null else blk: {
|
||||||
_ = try appendToken(rp.c, .Keyword_callconv, "callconv");
|
_ = try appendToken(rp.c, .Keyword_callconv, "callconv");
|
||||||
_ = try appendToken(rp.c, .LParen, "(");
|
_ = try appendToken(rp.c, .LParen, "(");
|
||||||
const expr = try transCreateNodeEnumLiteral(rp.c, @tagName(cc));
|
const expr = try transCreateNodeEnumLiteral(rp.c, @tagName(cc));
|
||||||
|
@ -1422,6 +1422,7 @@ pub const TranslateCContext = struct {
|
|||||||
sources: ArrayList(SourceFile),
|
sources: ArrayList(SourceFile),
|
||||||
expected_lines: ArrayList([]const u8),
|
expected_lines: ArrayList([]const u8),
|
||||||
allow_warnings: bool,
|
allow_warnings: bool,
|
||||||
|
target: Target = .Native,
|
||||||
|
|
||||||
const SourceFile = struct {
|
const SourceFile = struct {
|
||||||
filename: []const u8,
|
filename: []const u8,
|
||||||
@ -1474,6 +1475,14 @@ pub const TranslateCContext = struct {
|
|||||||
var zig_args = ArrayList([]const u8).init(b.allocator);
|
var zig_args = ArrayList([]const u8).init(b.allocator);
|
||||||
zig_args.append(b.zig_exe) catch unreachable;
|
zig_args.append(b.zig_exe) catch unreachable;
|
||||||
|
|
||||||
|
switch (self.case.target) {
|
||||||
|
.Native => {},
|
||||||
|
.Cross => {
|
||||||
|
try zig_args.append("-target");
|
||||||
|
try zig_args.append(try self.case.target.zigTriple(b.allocator));
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
const translate_c_cmd = "translate-c";
|
const translate_c_cmd = "translate-c";
|
||||||
zig_args.append(translate_c_cmd) catch unreachable;
|
zig_args.append(translate_c_cmd) catch unreachable;
|
||||||
zig_args.append(b.pathFromRoot(root_src)) catch unreachable;
|
zig_args.append(b.pathFromRoot(root_src)) catch unreachable;
|
||||||
@ -1602,6 +1611,18 @@ pub const TranslateCContext = struct {
|
|||||||
self.addCase(tc);
|
self.addCase(tc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn addWithTarget(
|
||||||
|
self: *TranslateCContext,
|
||||||
|
name: []const u8,
|
||||||
|
target: Target,
|
||||||
|
source: []const u8,
|
||||||
|
expected_lines: []const []const u8,
|
||||||
|
) void {
|
||||||
|
const tc = self.create(false, "source.h", name, source, expected_lines);
|
||||||
|
tc.target = target;
|
||||||
|
self.addCase(tc);
|
||||||
|
}
|
||||||
|
|
||||||
pub fn addAllowWarnings(
|
pub fn addAllowWarnings(
|
||||||
self: *TranslateCContext,
|
self: *TranslateCContext,
|
||||||
name: []const u8,
|
name: []const u8,
|
||||||
|
@ -106,7 +106,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
|
|||||||
\\static void bar(void) {}
|
\\static void bar(void) {}
|
||||||
, &[_][]const u8{
|
, &[_][]const u8{
|
||||||
\\pub export fn foo() void {}
|
\\pub export fn foo() void {}
|
||||||
\\pub fn bar() void {}
|
\\pub fn bar() callconv(.C) void {}
|
||||||
});
|
});
|
||||||
|
|
||||||
cases.add("typedef void",
|
cases.add("typedef void",
|
||||||
@ -843,6 +843,38 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
|
|||||||
\\pub const fn1 = ?extern fn (u8) void;
|
\\pub const fn1 = ?extern fn (u8) void;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
cases.addWithTarget("Calling convention", tests.Target{
|
||||||
|
.Cross = .{ .os = .linux, .arch = .i386, .abi = .none },
|
||||||
|
},
|
||||||
|
\\void __attribute__((fastcall)) foo1(float *a);
|
||||||
|
\\void __attribute__((stdcall)) foo2(float *a);
|
||||||
|
\\void __attribute__((vectorcall)) foo3(float *a);
|
||||||
|
\\void __attribute__((cdecl)) foo4(float *a);
|
||||||
|
, &[_][]const u8{
|
||||||
|
\\pub fn foo1(a: [*c]f32) callconv(.Fastcall) void;
|
||||||
|
\\pub fn foo2(a: [*c]f32) callconv(.Stdcall) void;
|
||||||
|
\\pub fn foo3(a: [*c]f32) callconv(.Vectorcall) void;
|
||||||
|
\\pub extern fn foo4(a: [*c]f32) void;
|
||||||
|
});
|
||||||
|
|
||||||
|
cases.addWithTarget("Calling convention", tests.Target{
|
||||||
|
.Cross = .{ .os = .linux, .arch = .{ .arm = .v8_5a }, .abi = .none },
|
||||||
|
},
|
||||||
|
\\void __attribute__((pcs("aapcs"))) foo1(float *a);
|
||||||
|
\\void __attribute__((pcs("aapcs-vfp"))) foo2(float *a);
|
||||||
|
, &[_][]const u8{
|
||||||
|
\\pub fn foo1(a: [*c]f32) callconv(.AAPCS) void;
|
||||||
|
\\pub fn foo2(a: [*c]f32) callconv(.AAPCSVFP) void;
|
||||||
|
});
|
||||||
|
|
||||||
|
cases.addWithTarget("Calling convention", tests.Target{
|
||||||
|
.Cross = .{ .os = .linux, .arch = .{ .aarch64 = .v8_5a }, .abi = .none },
|
||||||
|
},
|
||||||
|
\\void __attribute__((aarch64_vector_pcs)) foo1(float *a);
|
||||||
|
, &[_][]const u8{
|
||||||
|
\\pub fn foo1(a: [*c]f32) callconv(.Vectorcall) void;
|
||||||
|
});
|
||||||
|
|
||||||
cases.add("Parameterless function prototypes",
|
cases.add("Parameterless function prototypes",
|
||||||
\\void a() {}
|
\\void a() {}
|
||||||
\\void b(void) {}
|
\\void b(void) {}
|
||||||
@ -871,7 +903,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
|
|||||||
\\ char *arr1[10] ={0};
|
\\ char *arr1[10] ={0};
|
||||||
\\}
|
\\}
|
||||||
, &[_][]const u8{
|
, &[_][]const u8{
|
||||||
\\pub fn foo() void {
|
\\pub fn foo() callconv(.C) void {
|
||||||
\\ var arr: [10]u8 = .{
|
\\ var arr: [10]u8 = .{
|
||||||
\\ @bitCast(u8, @truncate(i8, @as(c_int, 1))),
|
\\ @bitCast(u8, @truncate(i8, @as(c_int, 1))),
|
||||||
\\ } ++ .{0} ** 9;
|
\\ } ++ .{0} ** 9;
|
||||||
@ -2148,7 +2180,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
|
|||||||
\\ baz();
|
\\ baz();
|
||||||
\\}
|
\\}
|
||||||
, &[_][]const u8{
|
, &[_][]const u8{
|
||||||
\\pub fn bar() void {}
|
\\pub fn bar() callconv(.C) void {}
|
||||||
\\pub export fn foo(arg_baz: ?extern fn () [*c]c_int) void {
|
\\pub export fn foo(arg_baz: ?extern fn () [*c]c_int) void {
|
||||||
\\ var baz = arg_baz;
|
\\ var baz = arg_baz;
|
||||||
\\ bar();
|
\\ bar();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user