authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-05-10 15:44:40-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-05-10 15:44:40-07:00
logc4c5020f0267758c7eb127689177cf1a70fb6d97
treee2acc6873952863d72d1a1e55104a3518fdefc89
parent9654a54d4a2729200d38dbb6eec827cb03dc0f90

fixups to the previous commit

* Rename std.builtin.GlobalVisibility to std.builtin.SymbolVisibility * Add missing compile error. From the LLVM language reference: "A symbol with internal or private linkage must have default visibility."

7 files changed, 44 insertions(+), 34 deletions(-)

lib/std/builtin.zig+2-2
...@@ -70,7 +70,7 @@ pub const GlobalLinkage = enum {...@@ -70,7 +70,7 @@ pub const GlobalLinkage = enum {
7070
71/// This data structure is used by the Zig language code generation and71/// This data structure is used by the Zig language code generation and
72/// therefore must be kept in sync with the compiler implementation.72/// therefore must be kept in sync with the compiler implementation.
73pub const GlobalVisibility = enum {73pub const SymbolVisibility = enum {
74 default,74 default,
75 hidden,75 hidden,
76 protected,76 protected,
...@@ -663,7 +663,7 @@ pub const ExportOptions = struct {...@@ -663,7 +663,7 @@ pub const ExportOptions = struct {
663 name: []const u8,663 name: []const u8,
664 linkage: GlobalLinkage = .Strong,664 linkage: GlobalLinkage = .Strong,
665 section: ?[]const u8 = null,665 section: ?[]const u8 = null,
666 visibility: GlobalVisibility = .default,666 visibility: SymbolVisibility = .default,
667};667};
668668
669/// This data structure is used by the Zig language code generation and669/// This data structure is used by the Zig language code generation and
src/Sema.zig+20-10
...@@ -14999,27 +14999,37 @@ fn resolveExportOptions(...@@ -14999,27 +14999,37 @@ fn resolveExportOptions(
14999 const air_ref = sema.resolveInst(zir_ref);14999 const air_ref = sema.resolveInst(zir_ref);
15000 const options = try sema.coerce(block, export_options_ty, air_ref, src);15000 const options = try sema.coerce(block, export_options_ty, air_ref, src);
1500115001
15002 const name = try sema.fieldVal(block, src, options, "name", src);15002 const name_operand = try sema.fieldVal(block, src, options, "name", src);
15003 const name_val = try sema.resolveConstValue(block, src, name);15003 const name_val = try sema.resolveConstValue(block, src, name_operand);
15004 const name_ty = Type.initTag(.const_slice_u8);
15005 const name = try name_val.toAllocatedBytes(name_ty, sema.arena, sema.mod);
1500415006
15005 const linkage = try sema.fieldVal(block, src, options, "linkage", src);15007 const linkage_operand = try sema.fieldVal(block, src, options, "linkage", src);
15006 const linkage_val = try sema.resolveConstValue(block, src, linkage);15008 const linkage_val = try sema.resolveConstValue(block, src, linkage_operand);
15009 const linkage = linkage_val.toEnum(std.builtin.GlobalLinkage);
1500715010
15008 const section = try sema.fieldVal(block, src, options, "section", src);15011 const section = try sema.fieldVal(block, src, options, "section", src);
15009 const section_val = try sema.resolveConstValue(block, src, section);15012 const section_val = try sema.resolveConstValue(block, src, section);
1501015013
15011 const visibility = try sema.fieldVal(block, src, options, "visibility", src);15014 const visibility_operand = try sema.fieldVal(block, src, options, "visibility", src);
15012 const visibility_val = try sema.resolveConstValue(block, src, visibility);15015 const visibility_val = try sema.resolveConstValue(block, src, visibility_operand);
15016 const visibility = visibility_val.toEnum(std.builtin.SymbolVisibility);
15017
15018 if (visibility != .default and linkage == .Internal) {
15019 return sema.fail(block, src, "symbol '{s}' exported with internal linkage has non-default visibility {s}", .{
15020 name, @tagName(visibility),
15021 });
15022 }
1501315023
15014 if (!section_val.isNull()) {15024 if (!section_val.isNull()) {
15015 return sema.fail(block, src, "TODO: implement exporting with linksection", .{});15025 return sema.fail(block, src, "TODO: implement exporting with linksection", .{});
15016 }15026 }
15017 const name_ty = Type.initTag(.const_slice_u8);15027
15018 return std.builtin.ExportOptions{15028 return std.builtin.ExportOptions{
15019 .name = try name_val.toAllocatedBytes(name_ty, sema.arena, sema.mod),15029 .name = name,
15020 .linkage = linkage_val.toEnum(std.builtin.GlobalLinkage),15030 .linkage = linkage,
15021 .section = null, // TODO15031 .section = null, // TODO
15022 .visibility = visibility_val.toEnum(std.builtin.GlobalVisibility),15032 .visibility = visibility,
15023 };15033 };
15024}15034}
1502515035
src/stage1/all_types.hpp+5-5
...@@ -571,10 +571,10 @@ enum GlobalLinkageId {...@@ -571,10 +571,10 @@ enum GlobalLinkageId {
571 GlobalLinkageIdLinkOnce,571 GlobalLinkageIdLinkOnce,
572};572};
573573
574enum GlobalVisibilityId {574enum SymbolVisibilityId {
575 GlobalVisibilityIdDefault,575 SymbolVisibilityIdDefault,
576 GlobalVisibilityIdHidden,576 SymbolVisibilityIdHidden,
577 GlobalVisibilityIdProtected,577 SymbolVisibilityIdProtected,
578};578};
579579
580enum TldId {580enum TldId {
...@@ -1660,7 +1660,7 @@ enum FnAnalState {...@@ -1660,7 +1660,7 @@ enum FnAnalState {
1660struct GlobalExport {1660struct GlobalExport {
1661 Buf name;1661 Buf name;
1662 GlobalLinkageId linkage;1662 GlobalLinkageId linkage;
1663 GlobalVisibilityId visibility;1663 SymbolVisibilityId visibility;
1664};1664};
16651665
1666struct ZigFn {1666struct ZigFn {
src/stage1/analyze.cpp+5-5
...@@ -3717,7 +3717,7 @@ ZigType *get_test_fn_type(CodeGen *g) {...@@ -3717,7 +3717,7 @@ ZigType *get_test_fn_type(CodeGen *g) {
3717 return g->test_fn_type;3717 return g->test_fn_type;
3718}3718}
37193719
3720void add_var_export(CodeGen *g, ZigVar *var, const char *symbol_name, GlobalLinkageId linkage, GlobalVisibilityId visibility) {3720void add_var_export(CodeGen *g, ZigVar *var, const char *symbol_name, GlobalLinkageId linkage, SymbolVisibilityId visibility) {
3721 GlobalExport *global_export = var->export_list.add_one();3721 GlobalExport *global_export = var->export_list.add_one();
3722 memset(global_export, 0, sizeof(GlobalExport));3722 memset(global_export, 0, sizeof(GlobalExport));
3723 buf_init_from_str(&global_export->name, symbol_name);3723 buf_init_from_str(&global_export->name, symbol_name);
...@@ -3725,7 +3725,7 @@ void add_var_export(CodeGen *g, ZigVar *var, const char *symbol_name, GlobalLink...@@ -3725,7 +3725,7 @@ void add_var_export(CodeGen *g, ZigVar *var, const char *symbol_name, GlobalLink
3725 global_export->visibility = visibility;3725 global_export->visibility = visibility;
3726}3726}
37273727
3728void add_fn_export(CodeGen *g, ZigFn *fn_table_entry, const char *symbol_name, GlobalLinkageId linkage, GlobalVisibilityId visibility, CallingConvention cc) {3728void add_fn_export(CodeGen *g, ZigFn *fn_table_entry, const char *symbol_name, GlobalLinkageId linkage, SymbolVisibilityId visibility, CallingConvention cc) {
3729 CallingConvention winapi_cc = g->zig_target->arch == ZigLLVM_x863729 CallingConvention winapi_cc = g->zig_target->arch == ZigLLVM_x86
3730 ? CallingConventionStdcall3730 ? CallingConventionStdcall
3731 : CallingConventionC;3731 : CallingConventionC;
...@@ -3854,13 +3854,13 @@ static void resolve_decl_fn(CodeGen *g, TldFn *tld_fn) {...@@ -3854,13 +3854,13 @@ static void resolve_decl_fn(CodeGen *g, TldFn *tld_fn) {
3854 case CallingConventionWin64:3854 case CallingConventionWin64:
3855 case CallingConventionPtxKernel:3855 case CallingConventionPtxKernel:
3856 add_fn_export(g, fn_table_entry, buf_ptr(&fn_table_entry->symbol_name),3856 add_fn_export(g, fn_table_entry, buf_ptr(&fn_table_entry->symbol_name),
3857 GlobalLinkageIdStrong, GlobalVisibilityIdDefault, fn_cc);3857 GlobalLinkageIdStrong, SymbolVisibilityIdDefault, fn_cc);
3858 break;3858 break;
3859 case CallingConventionUnspecified:3859 case CallingConventionUnspecified:
3860 // An exported function without a specific calling3860 // An exported function without a specific calling
3861 // convention defaults to C3861 // convention defaults to C
3862 add_fn_export(g, fn_table_entry, buf_ptr(&fn_table_entry->symbol_name),3862 add_fn_export(g, fn_table_entry, buf_ptr(&fn_table_entry->symbol_name),
3863 GlobalLinkageIdStrong, GlobalVisibilityIdDefault, CallingConventionC);3863 GlobalLinkageIdStrong, SymbolVisibilityIdDefault, CallingConventionC);
3864 break;3864 break;
3865 }3865 }
3866 }3866 }
...@@ -4323,7 +4323,7 @@ static void resolve_decl_var(CodeGen *g, TldVar *tld_var, bool allow_lazy) {...@@ -4323,7 +4323,7 @@ static void resolve_decl_var(CodeGen *g, TldVar *tld_var, bool allow_lazy) {
43234323
4324 if (is_export) {4324 if (is_export) {
4325 validate_export_var_type(g, type, source_node);4325 validate_export_var_type(g, type, source_node);
4326 add_var_export(g, tld_var->var, tld_var->var->name, GlobalLinkageIdStrong, GlobalVisibilityIdDefault);4326 add_var_export(g, tld_var->var, tld_var->var->name, GlobalLinkageIdStrong, SymbolVisibilityIdDefault);
4327 }4327 }
43284328
4329 if (is_extern) {4329 if (is_extern) {
src/stage1/analyze.hpp+2-2
...@@ -221,8 +221,8 @@ ZigType *get_align_amt_type(CodeGen *g);...@@ -221,8 +221,8 @@ ZigType *get_align_amt_type(CodeGen *g);
221ZigPackage *new_anonymous_package(void);221ZigPackage *new_anonymous_package(void);
222222
223Buf *const_value_to_buffer(ZigValue *const_val);223Buf *const_value_to_buffer(ZigValue *const_val);
224void add_fn_export(CodeGen *g, ZigFn *fn_table_entry, const char *symbol_name, GlobalLinkageId linkage, GlobalVisibilityId visibility, CallingConvention cc);224void add_fn_export(CodeGen *g, ZigFn *fn_table_entry, const char *symbol_name, GlobalLinkageId linkage, SymbolVisibilityId visibility, CallingConvention cc);
225void add_var_export(CodeGen *g, ZigVar *fn_table_entry, const char *symbol_name, GlobalLinkageId linkage, GlobalVisibilityId visibility);225void add_var_export(CodeGen *g, ZigVar *fn_table_entry, const char *symbol_name, GlobalLinkageId linkage, SymbolVisibilityId visibility);
226226
227227
228ZigValue *get_builtin_value(CodeGen *codegen, const char *name);228ZigValue *get_builtin_value(CodeGen *codegen, const char *name);
src/stage1/codegen.cpp+6-6
...@@ -242,13 +242,13 @@ static LLVMLinkage to_llvm_linkage(GlobalLinkageId id, bool is_extern) {...@@ -242,13 +242,13 @@ static LLVMLinkage to_llvm_linkage(GlobalLinkageId id, bool is_extern) {
242 zig_unreachable();242 zig_unreachable();
243}243}
244244
245static LLVMVisibility to_llvm_visibility(GlobalVisibilityId id) {245static LLVMVisibility to_llvm_visibility(SymbolVisibilityId id) {
246 switch (id) {246 switch (id) {
247 case GlobalVisibilityIdDefault:247 case SymbolVisibilityIdDefault:
248 return LLVMDefaultVisibility;248 return LLVMDefaultVisibility;
249 case GlobalVisibilityIdHidden:249 case SymbolVisibilityIdHidden:
250 return LLVMHiddenVisibility;250 return LLVMHiddenVisibility;
251 case GlobalVisibilityIdProtected:251 case SymbolVisibilityIdProtected:
252 return LLVMProtectedVisibility;252 return LLVMProtectedVisibility;
253 }253 }
254 zig_unreachable();254 zig_unreachable();
...@@ -412,7 +412,7 @@ static LLVMValueRef make_fn_llvm_value(CodeGen *g, ZigFn *fn) {...@@ -412,7 +412,7 @@ static LLVMValueRef make_fn_llvm_value(CodeGen *g, ZigFn *fn) {
412 const char *unmangled_name = buf_ptr(&fn->symbol_name);412 const char *unmangled_name = buf_ptr(&fn->symbol_name);
413 const char *symbol_name;413 const char *symbol_name;
414 GlobalLinkageId linkage;414 GlobalLinkageId linkage;
415 GlobalVisibilityId visibility = GlobalVisibilityIdDefault;415 SymbolVisibilityId visibility = SymbolVisibilityIdDefault;
416 if (fn->body_node == nullptr) {416 if (fn->body_node == nullptr) {
417 symbol_name = unmangled_name;417 symbol_name = unmangled_name;
418 linkage = GlobalLinkageIdStrong;418 linkage = GlobalLinkageIdStrong;
...@@ -8967,7 +8967,7 @@ static void do_code_gen(CodeGen *g) {...@@ -8967,7 +8967,7 @@ static void do_code_gen(CodeGen *g) {
8967 assert(var->decl_node);8967 assert(var->decl_node);
89688968
8969 GlobalLinkageId linkage;8969 GlobalLinkageId linkage;
8970 GlobalVisibilityId visibility = GlobalVisibilityIdDefault;8970 SymbolVisibilityId visibility = SymbolVisibilityIdDefault;
8971 const char *unmangled_name = var->name;8971 const char *unmangled_name = var->name;
8972 const char *symbol_name;8972 const char *symbol_name;
8973 if (var->export_list.length == 0) {8973 if (var->export_list.length == 0) {
src/stage1/ir.cpp+4-4
...@@ -8635,11 +8635,11 @@ static bool ir_resolve_global_linkage(IrAnalyze *ira, Stage1AirInst *value, Glob...@@ -8635,11 +8635,11 @@ static bool ir_resolve_global_linkage(IrAnalyze *ira, Stage1AirInst *value, Glob
8635 return true;8635 return true;
8636}8636}
86378637
8638static bool ir_resolve_global_visibility(IrAnalyze *ira, Stage1AirInst *value, GlobalVisibilityId *out) {8638static bool ir_resolve_global_visibility(IrAnalyze *ira, Stage1AirInst *value, SymbolVisibilityId *out) {
8639 if (type_is_invalid(value->value->type))8639 if (type_is_invalid(value->value->type))
8640 return false;8640 return false;
86418641
8642 ZigType *global_visibility_type = get_builtin_type(ira->codegen, "GlobalVisibility");8642 ZigType *global_visibility_type = get_builtin_type(ira->codegen, "SymbolVisibility");
86438643
8644 Stage1AirInst *casted_value = ir_implicit_cast(ira, value, global_visibility_type);8644 Stage1AirInst *casted_value = ir_implicit_cast(ira, value, global_visibility_type);
8645 if (type_is_invalid(casted_value->value->type))8645 if (type_is_invalid(casted_value->value->type))
...@@ -8649,7 +8649,7 @@ static bool ir_resolve_global_visibility(IrAnalyze *ira, Stage1AirInst *value, G...@@ -8649,7 +8649,7 @@ static bool ir_resolve_global_visibility(IrAnalyze *ira, Stage1AirInst *value, G
8649 if (!const_val)8649 if (!const_val)
8650 return false;8650 return false;
86518651
8652 *out = (GlobalVisibilityId)bigint_as_u32(&const_val->data.x_enum_tag);8652 *out = (SymbolVisibilityId)bigint_as_u32(&const_val->data.x_enum_tag);
8653 return true;8653 return true;
8654}8654}
86558655
...@@ -11714,7 +11714,7 @@ static Stage1AirInst *ir_analyze_instruction_export(IrAnalyze *ira, Stage1ZirIns...@@ -11714,7 +11714,7 @@ static Stage1AirInst *ir_analyze_instruction_export(IrAnalyze *ira, Stage1ZirIns
11714 if (!ir_resolve_global_linkage(ira, linkage_inst, &global_linkage_id))11714 if (!ir_resolve_global_linkage(ira, linkage_inst, &global_linkage_id))
11715 return ira->codegen->invalid_inst_gen;11715 return ira->codegen->invalid_inst_gen;
1171611716
11717 GlobalVisibilityId global_visibility_id;11717 SymbolVisibilityId global_visibility_id;
11718 if (!ir_resolve_global_visibility(ira, visibility_inst, &global_visibility_id))11718 if (!ir_resolve_global_visibility(ira, visibility_inst, &global_visibility_id))
11719 return ira->codegen->invalid_inst_gen;11719 return ira->codegen->invalid_inst_gen;
1172011720