From 010596c93054543c3c218e7d4b045d5e46384dab Mon Sep 17 00:00:00 2001 From: r00ster91 Date: Sat, 4 Mar 2023 12:51:16 +0100 Subject: [PATCH] AstGen: compile-error on primitive value export Fixes #14778 Co-authored-by: Veikka Tuominen --- src/AstGen.zig | 5 +++- .../exporting_primitive_values.zig | 29 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 test/cases/compile_errors/exporting_primitive_values.zig diff --git a/src/AstGen.zig b/src/AstGen.zig index 41a8ccadb2..8e3f11df76 100644 --- a/src/AstGen.zig +++ b/src/AstGen.zig @@ -7976,6 +7976,9 @@ fn builtinCall( switch (node_tags[params[0]]) { .identifier => { const ident_token = main_tokens[params[0]]; + if (isPrimitive(tree.tokenSlice(ident_token))) { + return astgen.failTok(ident_token, "unable to export primitive value", .{}); + } decl_name = try astgen.identAsString(ident_token); var s = scope; @@ -8988,7 +8991,7 @@ const primitive_instrs = std.ComptimeStringMap(Zir.Inst.Ref, .{ }); comptime { - // These checks ensure that std.zig.primitives stays in synce with the primitive->Zir map. + // These checks ensure that std.zig.primitives stays in sync with the primitive->Zir map. const primitives = std.zig.primitives; for (primitive_instrs.kvs) |kv| { if (!primitives.isPrimitive(kv.key)) { diff --git a/test/cases/compile_errors/exporting_primitive_values.zig b/test/cases/compile_errors/exporting_primitive_values.zig new file mode 100644 index 0000000000..bf3c38a553 --- /dev/null +++ b/test/cases/compile_errors/exporting_primitive_values.zig @@ -0,0 +1,29 @@ +pub export fn entry1() void { + @export(u100, .{ .name = "a" }); +} +pub export fn entry3() void { + @export(undefined, .{ .name = "b" }); +} +pub export fn entry4() void { + @export(null, .{ .name = "c" }); +} +pub export fn entry5() void { + @export(false, .{ .name = "d" }); +} +pub export fn entry6() void { + @export(u8, .{ .name = "e" }); +} +pub export fn entry7() void { + @export(u65535, .{ .name = "f" }); +} + +// error +// backend=llvm +// target=native +// +// :2:13: error: unable to export primitive value +// :5:13: error: unable to export primitive value +// :8:13: error: unable to export primitive value +// :11:13: error: unable to export primitive value +// :14:13: error: unable to export primitive value +// :17:13: error: unable to export primitive value