Merge remote-tracking branch 'origin/master' into copy-elision-3
This commit is contained in:
28
src/ir.cpp
28
src/ir.cpp
@@ -14448,20 +14448,6 @@ static IrInstruction *ir_analyze_instruction_decl_var(IrAnalyze *ira,
|
||||
return ir_build_var_decl_gen(ira, &decl_var_instruction->base, var, var_ptr);
|
||||
}
|
||||
|
||||
static VarLinkage global_linkage_to_var_linkage(GlobalLinkageId id) {
|
||||
switch (id) {
|
||||
case GlobalLinkageIdStrong:
|
||||
return VarLinkageExportStrong;
|
||||
case GlobalLinkageIdWeak:
|
||||
return VarLinkageExportWeak;
|
||||
case GlobalLinkageIdLinkOnce:
|
||||
return VarLinkageExportLinkOnce;
|
||||
case GlobalLinkageIdInternal:
|
||||
return VarLinkageInternal;
|
||||
}
|
||||
zig_unreachable();
|
||||
}
|
||||
|
||||
static IrInstruction *ir_analyze_instruction_export(IrAnalyze *ira, IrInstructionExport *instruction) {
|
||||
IrInstruction *name = instruction->name->child;
|
||||
Buf *symbol_name = ir_resolve_str(ira, name);
|
||||
@@ -14558,6 +14544,15 @@ static IrInstruction *ir_analyze_instruction_export(IrAnalyze *ira, IrInstructio
|
||||
want_var_export = true;
|
||||
}
|
||||
break;
|
||||
case ZigTypeIdArray:
|
||||
if (!type_allowed_in_extern(ira->codegen, target->value.type->data.array.child_type)) {
|
||||
ir_add_error(ira, target,
|
||||
buf_sprintf("array element type '%s' not extern-compatible",
|
||||
buf_ptr(&target->value.type->data.array.child_type->name)));
|
||||
} else {
|
||||
want_var_export = true;
|
||||
}
|
||||
break;
|
||||
case ZigTypeIdMetaType: {
|
||||
ZigType *type_value = target->value.data.x_type;
|
||||
switch (type_value->id) {
|
||||
@@ -14625,7 +14620,6 @@ static IrInstruction *ir_analyze_instruction_export(IrAnalyze *ira, IrInstructio
|
||||
case ZigTypeIdInt:
|
||||
case ZigTypeIdFloat:
|
||||
case ZigTypeIdPointer:
|
||||
case ZigTypeIdArray:
|
||||
case ZigTypeIdComptimeFloat:
|
||||
case ZigTypeIdComptimeInt:
|
||||
case ZigTypeIdUndefined:
|
||||
@@ -14651,7 +14645,7 @@ static IrInstruction *ir_analyze_instruction_export(IrAnalyze *ira, IrInstructio
|
||||
if (load_ptr->ptr->id == IrInstructionIdVarPtr) {
|
||||
IrInstructionVarPtr *var_ptr = reinterpret_cast<IrInstructionVarPtr *>(load_ptr->ptr);
|
||||
ZigVar *var = var_ptr->var;
|
||||
var->linkage = global_linkage_to_var_linkage(global_linkage_id);
|
||||
add_var_export(ira->codegen, var, symbol_name, global_linkage_id);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15244,7 +15238,7 @@ static IrInstruction *ir_get_var_ptr(IrAnalyze *ira, IrInstruction *instruction,
|
||||
ConstExprValue *mem_slot = nullptr;
|
||||
|
||||
bool comptime_var_mem = ir_get_var_is_comptime(var);
|
||||
bool linkage_makes_it_runtime = var->linkage == VarLinkageExternal;
|
||||
bool linkage_makes_it_runtime = var->decl_node->data.variable_declaration.is_extern;
|
||||
bool is_const = var->src_is_const;
|
||||
bool is_volatile = false;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user