authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2022-11-02 21:15:24-04:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2022-11-02 21:42:40-04:00
logfa46f9a3d75e6f3693827bf524244ed3c4902133
tree23f6d74e81eb31437987b7331ac96ff455d8fd02
parentb40fc70188fd097e9e05b5c18b635b67b718380e

cbe: fix extern


4 files changed, 54 insertions(+), 55 deletions(-)

lib/include/zig.h+34-34
......@@ -66,9 +66,9 @@
6666#endif
6767
6868#if defined(__cplusplus)
69#define zig_extern_c extern "C"
69#define zig_extern extern "C"
7070#else
71#define zig_extern_c
71#define zig_extern extern
7272#endif
7373
7474#if zig_has_builtin(debugtrap)
......@@ -265,8 +265,8 @@ typedef int64_t zig_i64;
265265#define zig_compiler_rt_abbrev_f80 xf
266266#define zig_compiler_rt_abbrev_f128 tf
267267
268zig_extern_c void *memcpy (void *zig_restrict, void const *zig_restrict, zig_usize);
269zig_extern_c void *memset (void *, int, zig_usize);
268zig_extern void *memcpy (void *zig_restrict, void const *zig_restrict, zig_usize);
269zig_extern void *memset (void *, int, zig_usize);
270270
271271/* ==================== 8/16/32/64-bit Integer Routines ===================== */
272272
......@@ -345,7 +345,7 @@ static inline zig_bool zig_addo_u32(zig_u32 *res, zig_u32 lhs, zig_u32 rhs, zig_
345345#endif
346346}
347347
348zig_extern_c zig_i32 __addosi4(zig_i32 lhs, zig_i32 rhs, zig_c_int *overflow);
348zig_extern zig_i32 __addosi4(zig_i32 lhs, zig_i32 rhs, zig_c_int *overflow);
349349static inline zig_bool zig_addo_i32(zig_i32 *res, zig_i32 lhs, zig_i32 rhs, zig_u8 bits) {
350350#if zig_has_builtin(add_overflow)
351351 zig_i32 full_res;
......@@ -371,7 +371,7 @@ static inline zig_bool zig_addo_u64(zig_u64 *res, zig_u64 lhs, zig_u64 rhs, zig_
371371#endif
372372}
373373
374zig_extern_c zig_i64 __addodi4(zig_i64 lhs, zig_i64 rhs, zig_c_int *overflow);
374zig_extern zig_i64 __addodi4(zig_i64 lhs, zig_i64 rhs, zig_c_int *overflow);
375375static inline zig_bool zig_addo_i64(zig_i64 *res, zig_i64 lhs, zig_i64 rhs, zig_u8 bits) {
376376#if zig_has_builtin(add_overflow)
377377 zig_i64 full_res;
......@@ -441,7 +441,7 @@ static inline zig_bool zig_subo_u32(zig_u32 *res, zig_u32 lhs, zig_u32 rhs, zig_
441441#endif
442442}
443443
444zig_extern_c zig_i32 __subosi4(zig_i32 lhs, zig_i32 rhs, zig_c_int *overflow);
444zig_extern zig_i32 __subosi4(zig_i32 lhs, zig_i32 rhs, zig_c_int *overflow);
445445static inline zig_bool zig_subo_i32(zig_i32 *res, zig_i32 lhs, zig_i32 rhs, zig_u8 bits) {
446446#if zig_has_builtin(sub_overflow)
447447 zig_i32 full_res;
......@@ -467,7 +467,7 @@ static inline zig_bool zig_subo_u64(zig_u64 *res, zig_u64 lhs, zig_u64 rhs, zig_
467467#endif
468468}
469469
470zig_extern_c zig_i64 __subodi4(zig_i64 lhs, zig_i64 rhs, zig_c_int *overflow);
470zig_extern zig_i64 __subodi4(zig_i64 lhs, zig_i64 rhs, zig_c_int *overflow);
471471static inline zig_bool zig_subo_i64(zig_i64 *res, zig_i64 lhs, zig_i64 rhs, zig_u8 bits) {
472472#if zig_has_builtin(sub_overflow)
473473 zig_i64 full_res;
......@@ -537,7 +537,7 @@ static inline zig_bool zig_mulo_u32(zig_u32 *res, zig_u32 lhs, zig_u32 rhs, zig_
537537#endif
538538}
539539
540zig_extern_c zig_i32 __mulosi4(zig_i32 lhs, zig_i32 rhs, zig_c_int *overflow);
540zig_extern zig_i32 __mulosi4(zig_i32 lhs, zig_i32 rhs, zig_c_int *overflow);
541541static inline zig_bool zig_mulo_i32(zig_i32 *res, zig_i32 lhs, zig_i32 rhs, zig_u8 bits) {
542542#if zig_has_builtin(mul_overflow)
543543 zig_i32 full_res;
......@@ -563,7 +563,7 @@ static inline zig_bool zig_mulo_u64(zig_u64 *res, zig_u64 lhs, zig_u64 rhs, zig_
563563#endif
564564}
565565
566zig_extern_c zig_i64 __mulodi4(zig_i64 lhs, zig_i64 rhs, zig_c_int *overflow);
566zig_extern zig_i64 __mulodi4(zig_i64 lhs, zig_i64 rhs, zig_c_int *overflow);
567567static inline zig_bool zig_mulo_i64(zig_i64 *res, zig_i64 lhs, zig_i64 rhs, zig_u8 bits) {
568568#if zig_has_builtin(mul_overflow)
569569 zig_i64 full_res;
......@@ -1210,7 +1210,7 @@ static inline zig_bool zig_addo_u128(zig_u128 *res, zig_u128 lhs, zig_u128 rhs,
12101210#endif
12111211}
12121212
1213zig_extern_c zig_i128 __addoti4(zig_i128 lhs, zig_i128 rhs, zig_c_int *overflow);
1213zig_extern zig_i128 __addoti4(zig_i128 lhs, zig_i128 rhs, zig_c_int *overflow);
12141214static inline zig_bool zig_addo_i128(zig_i128 *res, zig_i128 lhs, zig_i128 rhs, zig_u8 bits) {
12151215#if zig_has_builtin(add_overflow)
12161216 zig_i128 full_res;
......@@ -1236,7 +1236,7 @@ static inline zig_bool zig_subo_u128(zig_u128 *res, zig_u128 lhs, zig_u128 rhs,
12361236#endif
12371237}
12381238
1239zig_extern_c zig_i128 __suboti4(zig_i128 lhs, zig_i128 rhs, zig_c_int *overflow);
1239zig_extern zig_i128 __suboti4(zig_i128 lhs, zig_i128 rhs, zig_c_int *overflow);
12401240static inline zig_bool zig_subo_i128(zig_i128 *res, zig_i128 lhs, zig_i128 rhs, zig_u8 bits) {
12411241#if zig_has_builtin(sub_overflow)
12421242 zig_i128 full_res;
......@@ -1262,7 +1262,7 @@ static inline zig_bool zig_mulo_u128(zig_u128 *res, zig_u128 lhs, zig_u128 rhs,
12621262#endif
12631263}
12641264
1265zig_extern_c zig_i128 __muloti4(zig_i128 lhs, zig_i128 rhs, zig_c_int *overflow);
1265zig_extern zig_i128 __muloti4(zig_i128 lhs, zig_i128 rhs, zig_c_int *overflow);
12661266static inline zig_bool zig_mulo_i128(zig_i128 *res, zig_i128 lhs, zig_i128 rhs, zig_u8 bits) {
12671267#if zig_has_builtin(mul_overflow)
12681268 zig_i128 full_res;
......@@ -1552,7 +1552,7 @@ typedef long double zig_c_longdouble;
15521552#define zig_as_special_c_longdouble(sign, name, arg, repr) sign __builtin_##name##l(arg)
15531553
15541554#define zig_convert_builtin(ResType, operation, ArgType, version) \
1555 zig_extern_c zig_##ResType zig_expand_concat(zig_expand_concat(zig_expand_concat(__##operation, \
1555 zig_extern zig_##ResType zig_expand_concat(zig_expand_concat(zig_expand_concat(__##operation, \
15561556 zig_compiler_rt_abbrev_##ArgType), zig_compiler_rt_abbrev_##ResType), version)(zig_##ArgType);
15571557zig_convert_builtin(f16, trunc, f32, 2)
15581558zig_convert_builtin(f16, trunc, f64, 2)
......@@ -1585,7 +1585,7 @@ zig_convert_builtin(f128, extend, f80, 2)
15851585 }
15861586
15871587#define zig_float_less_builtin_0(Type, operation) \
1588 zig_extern_c zig_i8 zig_expand_concat(zig_expand_concat(__##operation, \
1588 zig_extern zig_i8 zig_expand_concat(zig_expand_concat(__##operation, \
15891589 zig_compiler_rt_abbrev_##Type), 2)(zig_##Type, zig_##Type); \
15901590 static inline zig_i8 zig_##operation##_##Type(zig_##Type lhs, zig_##Type rhs) { \
15911591 return (zig_i8)zig_expand_concat(zig_expand_concat(__##operation, zig_compiler_rt_abbrev_##Type), 2)(lhs, rhs); \
......@@ -1603,7 +1603,7 @@ zig_convert_builtin(f128, extend, f80, 2)
16031603 }
16041604
16051605#define zig_float_binary_builtin_0(Type, operation, operator) \
1606 zig_extern_c zig_##Type zig_expand_concat(zig_expand_concat(__##operation, \
1606 zig_extern zig_##Type zig_expand_concat(zig_expand_concat(__##operation, \
16071607 zig_compiler_rt_abbrev_##Type), 3)(zig_##Type, zig_##Type); \
16081608 static inline zig_##Type zig_##operation##_##Type(zig_##Type lhs, zig_##Type rhs) { \
16091609 return zig_expand_concat(zig_expand_concat(__##operation, zig_compiler_rt_abbrev_##Type), 3)(lhs, rhs); \
......@@ -1638,24 +1638,24 @@ zig_convert_builtin(f128, extend, f80, 2)
16381638 zig_expand_concat(zig_float_binary_builtin_, zig_has_##Type)(Type, sub, -) \
16391639 zig_expand_concat(zig_float_binary_builtin_, zig_has_##Type)(Type, mul, *) \
16401640 zig_expand_concat(zig_float_binary_builtin_, zig_has_##Type)(Type, div, /) \
1641 zig_extern_c zig_##Type zig_libc_name_##Type(sqrt)(zig_##Type); \
1642 zig_extern_c zig_##Type zig_libc_name_##Type(sin)(zig_##Type); \
1643 zig_extern_c zig_##Type zig_libc_name_##Type(cos)(zig_##Type); \
1644 zig_extern_c zig_##Type zig_libc_name_##Type(tan)(zig_##Type); \
1645 zig_extern_c zig_##Type zig_libc_name_##Type(exp)(zig_##Type); \
1646 zig_extern_c zig_##Type zig_libc_name_##Type(exp2)(zig_##Type); \
1647 zig_extern_c zig_##Type zig_libc_name_##Type(log)(zig_##Type); \
1648 zig_extern_c zig_##Type zig_libc_name_##Type(log2)(zig_##Type); \
1649 zig_extern_c zig_##Type zig_libc_name_##Type(log10)(zig_##Type); \
1650 zig_extern_c zig_##Type zig_libc_name_##Type(fabs)(zig_##Type); \
1651 zig_extern_c zig_##Type zig_libc_name_##Type(floor)(zig_##Type); \
1652 zig_extern_c zig_##Type zig_libc_name_##Type(ceil)(zig_##Type); \
1653 zig_extern_c zig_##Type zig_libc_name_##Type(round)(zig_##Type); \
1654 zig_extern_c zig_##Type zig_libc_name_##Type(trunc)(zig_##Type); \
1655 zig_extern_c zig_##Type zig_libc_name_##Type(fmod)(zig_##Type, zig_##Type); \
1656 zig_extern_c zig_##Type zig_libc_name_##Type(fmin)(zig_##Type, zig_##Type); \
1657 zig_extern_c zig_##Type zig_libc_name_##Type(fmax)(zig_##Type, zig_##Type); \
1658 zig_extern_c zig_##Type zig_libc_name_##Type(fma)(zig_##Type, zig_##Type, zig_##Type); \
1641 zig_extern zig_##Type zig_libc_name_##Type(sqrt)(zig_##Type); \
1642 zig_extern zig_##Type zig_libc_name_##Type(sin)(zig_##Type); \
1643 zig_extern zig_##Type zig_libc_name_##Type(cos)(zig_##Type); \
1644 zig_extern zig_##Type zig_libc_name_##Type(tan)(zig_##Type); \
1645 zig_extern zig_##Type zig_libc_name_##Type(exp)(zig_##Type); \
1646 zig_extern zig_##Type zig_libc_name_##Type(exp2)(zig_##Type); \
1647 zig_extern zig_##Type zig_libc_name_##Type(log)(zig_##Type); \
1648 zig_extern zig_##Type zig_libc_name_##Type(log2)(zig_##Type); \
1649 zig_extern zig_##Type zig_libc_name_##Type(log10)(zig_##Type); \
1650 zig_extern zig_##Type zig_libc_name_##Type(fabs)(zig_##Type); \
1651 zig_extern zig_##Type zig_libc_name_##Type(floor)(zig_##Type); \
1652 zig_extern zig_##Type zig_libc_name_##Type(ceil)(zig_##Type); \
1653 zig_extern zig_##Type zig_libc_name_##Type(round)(zig_##Type); \
1654 zig_extern zig_##Type zig_libc_name_##Type(trunc)(zig_##Type); \
1655 zig_extern zig_##Type zig_libc_name_##Type(fmod)(zig_##Type, zig_##Type); \
1656 zig_extern zig_##Type zig_libc_name_##Type(fmin)(zig_##Type, zig_##Type); \
1657 zig_extern zig_##Type zig_libc_name_##Type(fmax)(zig_##Type, zig_##Type); \
1658 zig_extern zig_##Type zig_libc_name_##Type(fma)(zig_##Type, zig_##Type, zig_##Type); \
16591659\
16601660 static inline zig_##Type zig_div_trunc_##Type(zig_##Type lhs, zig_##Type rhs) { \
16611661 return zig_libc_name_##Type(trunc)(zig_div_##Type(lhs, rhs)); \
src/codegen/c.zig+8-10
......@@ -2215,7 +2215,7 @@ pub fn genFunc(f: *Function) !void {
22152215
22162216 const is_global = o.dg.module.decl_exports.contains(f.func.owner_decl);
22172217 const fwd_decl_writer = o.dg.fwd_decl.writer();
2218 try fwd_decl_writer.writeAll(if (is_global) "zig_extern_c " else "static ");
2218 try fwd_decl_writer.writeAll(if (is_global) "zig_extern " else "static ");
22192219 try o.dg.renderFunctionSignature(fwd_decl_writer, .Forward);
22202220 try fwd_decl_writer.writeAll(";\n");
22212221
......@@ -2252,9 +2252,10 @@ pub fn genDecl(o: *Object) !void {
22522252 .ty = o.dg.decl.ty,
22532253 .val = o.dg.decl.val,
22542254 };
2255 if (!tv.ty.isFnOrHasRuntimeBitsIgnoreComptime()) return;
22552256 if (tv.val.tag() == .extern_fn) {
22562257 const fwd_decl_writer = o.dg.fwd_decl.writer();
2257 try fwd_decl_writer.writeAll("zig_extern_c ");
2258 try fwd_decl_writer.writeAll("zig_extern ");
22582259 try o.dg.renderFunctionSignature(fwd_decl_writer, .Forward);
22592260 try fwd_decl_writer.writeAll(";\n");
22602261 } else if (tv.val.castTag(.variable)) |var_payload| {
......@@ -2268,22 +2269,19 @@ pub fn genDecl(o: *Object) !void {
22682269 .decl = o.dg.decl_index,
22692270 };
22702271
2271 if (is_global) try fwd_decl_writer.writeAll("zig_extern_c ");
2272 try fwd_decl_writer.writeAll(if (is_global) "zig_extern " else "static ");
22722273 if (variable.is_threadlocal) try fwd_decl_writer.writeAll("zig_threadlocal ");
22732274 try o.dg.renderTypeAndName(fwd_decl_writer, o.dg.decl.ty, decl_c_value, .Mut, o.dg.decl.@"align", .Complete);
22742275 try fwd_decl_writer.writeAll(";\n");
22752276
2276 if (variable.is_extern or variable.init.isUndefDeep()) {
2277 return;
2278 }
2277 if (variable.is_extern) return;
22792278
22802279 const w = o.writer();
2280 if (!is_global) try w.writeAll("static ");
22812281 if (variable.is_threadlocal) try w.writeAll("zig_threadlocal ");
22822282 try o.dg.renderTypeAndName(w, o.dg.decl.ty, decl_c_value, .Mut, o.dg.decl.@"align", .Complete);
22832283 try w.writeAll(" = ");
2284 if (variable.init.tag() != .unreachable_value) {
2285 try o.dg.renderValue(w, tv.ty, variable.init, .Initializer);
2286 }
2284 try o.dg.renderValue(w, tv.ty, variable.init, .Initializer);
22872285 try w.writeByte(';');
22882286 try o.indent_writer.insertNewline();
22892287 } else {
......@@ -2319,7 +2317,7 @@ pub fn genHeader(dg: *DeclGen) error{ AnalysisFail, OutOfMemory }!void {
23192317 .Fn => {
23202318 const is_global = dg.declIsGlobal(tv);
23212319 if (is_global) {
2322 try writer.writeAll("zig_extern_c ");
2320 try writer.writeAll("zig_extern ");
23232321 try dg.renderFunctionSignature(writer, .Complete);
23242322 try dg.fwd_decl.appendSlice(";\n");
23252323 }
test/behavior/union.zig+1
......@@ -435,6 +435,7 @@ test "global union with single field is correctly initialized" {
435435 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
436436 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
437437 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
438 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
438439
439440 glbl = Foo1{
440441 .f = @typeInfo(Foo1).Union.fields[0].field_type{ .x = 123 },
test/stage2/cbe.zig+11-11
......@@ -951,7 +951,7 @@ pub fn addCases(ctx: *TestContext) !void {
951951 ctx.h("simple header", linux_x64,
952952 \\export fn start() void{}
953953 ,
954 \\zig_extern_c zig_void start(zig_void);
954 \\zig_extern zig_void start(zig_void);
955955 \\
956956 );
957957 ctx.h("header with single param function", linux_x64,
......@@ -959,7 +959,7 @@ pub fn addCases(ctx: *TestContext) !void {
959959 \\ _ = a;
960960 \\}
961961 ,
962 \\zig_extern_c zig_void start(zig_u8 const a0);
962 \\zig_extern zig_void start(zig_u8 const a0);
963963 \\
964964 );
965965 ctx.h("header with multiple param function", linux_x64,
......@@ -967,25 +967,25 @@ pub fn addCases(ctx: *TestContext) !void {
967967 \\ _ = a; _ = b; _ = c;
968968 \\}
969969 ,
970 \\zig_extern_c zig_void start(zig_u8 const a0, zig_u8 const a1, zig_u8 const a2);
970 \\zig_extern zig_void start(zig_u8 const a0, zig_u8 const a1, zig_u8 const a2);
971971 \\
972972 );
973973 ctx.h("header with u32 param function", linux_x64,
974974 \\export fn start(a: u32) void{ _ = a; }
975975 ,
976 \\zig_extern_c zig_void start(zig_u32 const a0);
976 \\zig_extern zig_void start(zig_u32 const a0);
977977 \\
978978 );
979979 ctx.h("header with usize param function", linux_x64,
980980 \\export fn start(a: usize) void{ _ = a; }
981981 ,
982 \\zig_extern_c zig_void start(zig_usize const a0);
982 \\zig_extern zig_void start(zig_usize const a0);
983983 \\
984984 );
985985 ctx.h("header with bool param function", linux_x64,
986986 \\export fn start(a: bool) void{_ = a;}
987987 ,
988 \\zig_extern_c zig_void start(zig_bool const a0);
988 \\zig_extern zig_void start(zig_bool const a0);
989989 \\
990990 );
991991 ctx.h("header with noreturn function", linux_x64,
......@@ -993,7 +993,7 @@ pub fn addCases(ctx: *TestContext) !void {
993993 \\ unreachable;
994994 \\}
995995 ,
996 \\zig_extern_c zig_noreturn start(zig_void);
996 \\zig_extern zig_noreturn start(zig_void);
997997 \\
998998 );
999999 ctx.h("header with multiple functions", linux_x64,
......@@ -1001,15 +1001,15 @@ pub fn addCases(ctx: *TestContext) !void {
10011001 \\export fn b() void{}
10021002 \\export fn c() void{}
10031003 ,
1004 \\zig_extern_c zig_void a(zig_void);
1005 \\zig_extern_c zig_void b(zig_void);
1006 \\zig_extern_c zig_void c(zig_void);
1004 \\zig_extern zig_void a(zig_void);
1005 \\zig_extern zig_void b(zig_void);
1006 \\zig_extern zig_void c(zig_void);
10071007 \\
10081008 );
10091009 ctx.h("header with multiple includes", linux_x64,
10101010 \\export fn start(a: u32, b: usize) void{ _ = a; _ = b; }
10111011 ,
1012 \\zig_extern_c zig_void start(zig_u32 const a0, zig_usize const a1);
1012 \\zig_extern zig_void start(zig_u32 const a0, zig_usize const a1);
10131013 \\
10141014 );
10151015}