mirror of
https://github.com/ziglang/zig.git
synced 2025-12-30 01:53:16 +00:00
Merge pull request #11047 from Vexu/stage2
Stage2: make `expectEqualSlices` work
This commit is contained in:
commit
6c045f9e83
108
src/Sema.zig
108
src/Sema.zig
@ -153,6 +153,7 @@ pub const Block = struct {
|
||||
pub const Inlining = struct {
|
||||
comptime_result: Air.Inst.Ref,
|
||||
merges: Merges,
|
||||
err: ?*Module.ErrorMsg = null,
|
||||
};
|
||||
|
||||
pub const Merges = struct {
|
||||
@ -1429,10 +1430,10 @@ pub fn fail(
|
||||
args: anytype,
|
||||
) CompileError {
|
||||
const err_msg = try sema.errMsg(block, src, format, args);
|
||||
return sema.failWithOwnedErrorMsg(err_msg);
|
||||
return sema.failWithOwnedErrorMsg(block, err_msg);
|
||||
}
|
||||
|
||||
fn failWithOwnedErrorMsg(sema: *Sema, err_msg: *Module.ErrorMsg) CompileError {
|
||||
fn failWithOwnedErrorMsg(sema: *Sema, block: *Block, err_msg: *Module.ErrorMsg) CompileError {
|
||||
@setCold(true);
|
||||
|
||||
if (crash_report.is_enabled and sema.mod.comp.debug_compile_errors) {
|
||||
@ -1445,6 +1446,7 @@ fn failWithOwnedErrorMsg(sema: *Sema, err_msg: *Module.ErrorMsg) CompileError {
|
||||
}
|
||||
|
||||
const mod = sema.mod;
|
||||
if (block.inlining) |some| some.err = err_msg;
|
||||
|
||||
{
|
||||
errdefer err_msg.destroy(mod.gpa);
|
||||
@ -1969,7 +1971,7 @@ fn zirEnumDecl(
|
||||
try sema.errNote(block, other_tag_src, msg, "other tag here", .{});
|
||||
break :msg msg;
|
||||
};
|
||||
return sema.failWithOwnedErrorMsg(msg);
|
||||
return sema.failWithOwnedErrorMsg(block, msg);
|
||||
}
|
||||
|
||||
if (has_tag_value) {
|
||||
@ -2316,7 +2318,7 @@ fn zirIndexablePtrLen(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileE
|
||||
);
|
||||
break :msg msg;
|
||||
};
|
||||
return sema.failWithOwnedErrorMsg(msg);
|
||||
return sema.failWithOwnedErrorMsg(block, msg);
|
||||
}
|
||||
|
||||
return sema.fieldVal(block, src, object, "len", src);
|
||||
@ -2772,7 +2774,7 @@ fn validateUnionInit(
|
||||
try sema.addDeclaredHereNote(msg, union_ty);
|
||||
break :msg msg;
|
||||
};
|
||||
return sema.failWithOwnedErrorMsg(msg);
|
||||
return sema.failWithOwnedErrorMsg(block, msg);
|
||||
}
|
||||
|
||||
if (is_comptime or block.is_comptime) {
|
||||
@ -2889,7 +2891,7 @@ fn validateStructInit(
|
||||
try sema.errNote(block, other_field_src, msg, "other field here", .{});
|
||||
break :msg msg;
|
||||
};
|
||||
return sema.failWithOwnedErrorMsg(msg);
|
||||
return sema.failWithOwnedErrorMsg(block, msg);
|
||||
}
|
||||
found_fields[field_index] = field_ptr;
|
||||
}
|
||||
@ -2936,7 +2938,7 @@ fn validateStructInit(
|
||||
"struct '{s}' declared here",
|
||||
.{fqn},
|
||||
);
|
||||
return sema.failWithOwnedErrorMsg(msg);
|
||||
return sema.failWithOwnedErrorMsg(block, msg);
|
||||
}
|
||||
|
||||
return;
|
||||
@ -3043,7 +3045,7 @@ fn validateStructInit(
|
||||
"struct '{s}' declared here",
|
||||
.{fqn},
|
||||
);
|
||||
return sema.failWithOwnedErrorMsg(msg);
|
||||
return sema.failWithOwnedErrorMsg(block, msg);
|
||||
}
|
||||
|
||||
if (struct_is_comptime) {
|
||||
@ -3215,7 +3217,7 @@ fn failWithBadMemberAccess(
|
||||
try sema.addDeclaredHereNote(msg, agg_ty);
|
||||
break :msg msg;
|
||||
};
|
||||
return sema.failWithOwnedErrorMsg(msg);
|
||||
return sema.failWithOwnedErrorMsg(block, msg);
|
||||
}
|
||||
|
||||
fn failWithBadStructFieldAccess(
|
||||
@ -3241,7 +3243,7 @@ fn failWithBadStructFieldAccess(
|
||||
try sema.mod.errNoteNonLazy(struct_obj.srcLoc(), msg, "struct declared here", .{});
|
||||
break :msg msg;
|
||||
};
|
||||
return sema.failWithOwnedErrorMsg(msg);
|
||||
return sema.failWithOwnedErrorMsg(block, msg);
|
||||
}
|
||||
|
||||
fn failWithBadUnionFieldAccess(
|
||||
@ -3267,7 +3269,7 @@ fn failWithBadUnionFieldAccess(
|
||||
try sema.mod.errNoteNonLazy(union_obj.srcLoc(), msg, "union declared here", .{});
|
||||
break :msg msg;
|
||||
};
|
||||
return sema.failWithOwnedErrorMsg(msg);
|
||||
return sema.failWithOwnedErrorMsg(block, msg);
|
||||
}
|
||||
|
||||
fn addDeclaredHereNote(sema: *Sema, parent: *Module.ErrorMsg, decl_ty: Type) !void {
|
||||
@ -3685,7 +3687,7 @@ fn zirCImport(sema: *Sema, parent_block: *Block, inst: Zir.Inst.Index) CompileEr
|
||||
@import("clang.zig").Stage2ErrorMsg.delete(c_import_res.errors.ptr, c_import_res.errors.len);
|
||||
break :msg msg;
|
||||
};
|
||||
return sema.failWithOwnedErrorMsg(msg);
|
||||
return sema.failWithOwnedErrorMsg(parent_block, msg);
|
||||
}
|
||||
const c_import_pkg = Package.create(
|
||||
sema.gpa,
|
||||
@ -4043,7 +4045,7 @@ fn zirSetAlignStack(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileErr
|
||||
try sema.errNote(block, src, msg, "other instance here", .{});
|
||||
break :msg msg;
|
||||
};
|
||||
return sema.failWithOwnedErrorMsg(msg);
|
||||
return sema.failWithOwnedErrorMsg(block, msg);
|
||||
}
|
||||
gop.value_ptr.* = .{ .alignment = alignment, .src = src };
|
||||
}
|
||||
@ -4228,7 +4230,7 @@ fn lookupInNamespace(
|
||||
}
|
||||
break :msg msg;
|
||||
};
|
||||
return sema.failWithOwnedErrorMsg(msg);
|
||||
return sema.failWithOwnedErrorMsg(block, msg);
|
||||
},
|
||||
}
|
||||
} else if (namespace.decls.get(ident_name)) |decl| {
|
||||
@ -4642,6 +4644,12 @@ fn analyzeCall(
|
||||
_ = sema.analyzeBody(&child_block, fn_info.body) catch |err| switch (err) {
|
||||
error.ComptimeReturn => break :result inlining.comptime_result,
|
||||
error.ComptimeBreak => unreachable, // Can't break through a fn call.
|
||||
error.AnalysisFail => {
|
||||
const err_msg = inlining.err orelse return err;
|
||||
try sema.errNote(block, call_src, err_msg, "called from here", .{});
|
||||
if (block.inlining) |some| some.err = err_msg;
|
||||
return err;
|
||||
},
|
||||
else => |e| return e,
|
||||
};
|
||||
break :result try sema.analyzeBlockBody(block, call_src, &child_block, merges);
|
||||
@ -5266,7 +5274,7 @@ fn zirMergeErrorSets(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileEr
|
||||
try sema.errNote(block, src, msg, "'||' merges error sets; 'or' performs boolean OR", .{});
|
||||
break :msg msg;
|
||||
};
|
||||
return sema.failWithOwnedErrorMsg(msg);
|
||||
return sema.failWithOwnedErrorMsg(block, msg);
|
||||
}
|
||||
const lhs_ty = try sema.analyzeAsType(block, lhs_src, lhs);
|
||||
const rhs_ty = try sema.analyzeAsType(block, rhs_src, rhs);
|
||||
@ -5396,7 +5404,7 @@ fn zirIntToEnum(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!A
|
||||
);
|
||||
break :msg msg;
|
||||
};
|
||||
return sema.failWithOwnedErrorMsg(msg);
|
||||
return sema.failWithOwnedErrorMsg(block, msg);
|
||||
}
|
||||
return sema.addConstant(dest_ty, int_val);
|
||||
}
|
||||
@ -6606,7 +6614,7 @@ fn zirSwitchCond(
|
||||
try sema.addDeclaredHereNote(msg, union_ty);
|
||||
break :msg msg;
|
||||
};
|
||||
return sema.failWithOwnedErrorMsg(msg);
|
||||
return sema.failWithOwnedErrorMsg(block, msg);
|
||||
};
|
||||
return sema.unionToTag(block, enum_ty, operand, src);
|
||||
},
|
||||
@ -6686,7 +6694,7 @@ fn zirSwitchBlock(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError
|
||||
);
|
||||
break :msg msg;
|
||||
};
|
||||
return sema.failWithOwnedErrorMsg(msg);
|
||||
return sema.failWithOwnedErrorMsg(block, msg);
|
||||
}
|
||||
|
||||
// Validate for duplicate items, missing else prong, and invalid range.
|
||||
@ -6778,7 +6786,7 @@ fn zirSwitchBlock(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError
|
||||
);
|
||||
break :msg msg;
|
||||
};
|
||||
return sema.failWithOwnedErrorMsg(msg);
|
||||
return sema.failWithOwnedErrorMsg(block, msg);
|
||||
}
|
||||
},
|
||||
.under => {
|
||||
@ -6892,7 +6900,7 @@ fn zirSwitchBlock(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError
|
||||
"error set '{}' declared here",
|
||||
.{operand_ty},
|
||||
);
|
||||
return sema.failWithOwnedErrorMsg(msg);
|
||||
return sema.failWithOwnedErrorMsg(block, msg);
|
||||
}
|
||||
|
||||
if (special_prong == .@"else") {
|
||||
@ -7571,7 +7579,7 @@ fn validateSwitchItemEnum(
|
||||
);
|
||||
break :msg msg;
|
||||
};
|
||||
return sema.failWithOwnedErrorMsg(msg);
|
||||
return sema.failWithOwnedErrorMsg(block, msg);
|
||||
};
|
||||
const maybe_prev_src = seen_fields[field_index];
|
||||
seen_fields[field_index] = switch_prong_src;
|
||||
@ -7624,7 +7632,7 @@ fn validateSwitchDupe(
|
||||
);
|
||||
break :msg msg;
|
||||
};
|
||||
return sema.failWithOwnedErrorMsg(msg);
|
||||
return sema.failWithOwnedErrorMsg(block, msg);
|
||||
}
|
||||
|
||||
fn validateSwitchItemBool(
|
||||
@ -7693,7 +7701,7 @@ fn validateSwitchNoRange(
|
||||
);
|
||||
break :msg msg;
|
||||
};
|
||||
return sema.failWithOwnedErrorMsg(msg);
|
||||
return sema.failWithOwnedErrorMsg(block, msg);
|
||||
}
|
||||
|
||||
fn zirHasField(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
|
||||
@ -9486,6 +9494,8 @@ fn analyzePtrArithmetic(
|
||||
}
|
||||
|
||||
const offset_int = try sema.usizeCast(block, offset_src, offset_val.toUnsignedInt());
|
||||
// TODO I tried to put this check earlier but it the LLVM backend generate invalid instructinons
|
||||
if (offset_int == 0) return ptr;
|
||||
if (ptr_val.getUnsignedInt()) |addr| {
|
||||
const target = sema.mod.getTarget();
|
||||
const ptr_child_ty = ptr_ty.childType();
|
||||
@ -11569,7 +11579,7 @@ fn zirStructInit(
|
||||
try sema.errNote(block, other_field_src, msg, "other field here", .{});
|
||||
break :msg msg;
|
||||
};
|
||||
return sema.failWithOwnedErrorMsg(msg);
|
||||
return sema.failWithOwnedErrorMsg(block, msg);
|
||||
}
|
||||
found_fields[field_index] = item.data.field_type;
|
||||
field_inits[field_index] = sema.resolveInst(item.data.init);
|
||||
@ -11647,7 +11657,7 @@ fn finishStructInit(
|
||||
"struct '{s}' declared here",
|
||||
.{fqn},
|
||||
);
|
||||
return sema.failWithOwnedErrorMsg(msg);
|
||||
return sema.failWithOwnedErrorMsg(block, msg);
|
||||
}
|
||||
|
||||
const is_comptime = for (field_inits) |field_init| {
|
||||
@ -12130,7 +12140,7 @@ fn zirTagName(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air
|
||||
try sema.mod.errNoteNonLazy(decl.srcLoc(), msg, "declared here", .{});
|
||||
break :msg msg;
|
||||
};
|
||||
return sema.failWithOwnedErrorMsg(msg);
|
||||
return sema.failWithOwnedErrorMsg(block, msg);
|
||||
},
|
||||
else => return sema.fail(block, operand_src, "expected enum or union; found {}", .{
|
||||
operand_ty,
|
||||
@ -12148,7 +12158,7 @@ fn zirTagName(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air
|
||||
try sema.mod.errNoteNonLazy(enum_decl.srcLoc(), msg, "declared here", .{});
|
||||
break :msg msg;
|
||||
};
|
||||
return sema.failWithOwnedErrorMsg(msg);
|
||||
return sema.failWithOwnedErrorMsg(block, msg);
|
||||
};
|
||||
const field_name = enum_ty.enumFieldName(field_index);
|
||||
return sema.addStrLit(block, field_name);
|
||||
@ -12624,7 +12634,7 @@ fn zirTruncate(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
|
||||
});
|
||||
break :msg msg;
|
||||
};
|
||||
return sema.failWithOwnedErrorMsg(msg);
|
||||
return sema.failWithOwnedErrorMsg(block, msg);
|
||||
}
|
||||
}
|
||||
|
||||
@ -12884,7 +12894,7 @@ fn checkPtrOperand(
|
||||
|
||||
break :msg msg;
|
||||
};
|
||||
return sema.failWithOwnedErrorMsg(msg);
|
||||
return sema.failWithOwnedErrorMsg(block, msg);
|
||||
},
|
||||
.Optional => if (ty.isPtrLikeOptional()) return,
|
||||
else => {},
|
||||
@ -12914,7 +12924,7 @@ fn checkPtrType(
|
||||
|
||||
break :msg msg;
|
||||
};
|
||||
return sema.failWithOwnedErrorMsg(msg);
|
||||
return sema.failWithOwnedErrorMsg(block, msg);
|
||||
},
|
||||
.Optional => if (ty.isPtrLikeOptional()) return,
|
||||
else => {},
|
||||
@ -13037,7 +13047,7 @@ fn checkComptimeVarStore(
|
||||
try sema.errNote(block, cond_src, msg, "runtime condition here", .{});
|
||||
break :msg msg;
|
||||
};
|
||||
return sema.failWithOwnedErrorMsg(msg);
|
||||
return sema.failWithOwnedErrorMsg(block, msg);
|
||||
}
|
||||
if (block.runtime_loop) |loop_src| {
|
||||
const msg = msg: {
|
||||
@ -13046,7 +13056,7 @@ fn checkComptimeVarStore(
|
||||
try sema.errNote(block, loop_src, msg, "non-inline loop here", .{});
|
||||
break :msg msg;
|
||||
};
|
||||
return sema.failWithOwnedErrorMsg(msg);
|
||||
return sema.failWithOwnedErrorMsg(block, msg);
|
||||
}
|
||||
unreachable;
|
||||
}
|
||||
@ -13114,7 +13124,7 @@ fn checkSimdBinOp(
|
||||
try sema.errNote(block, rhs_src, msg, "length {d} here", .{rhs_len});
|
||||
break :msg msg;
|
||||
};
|
||||
return sema.failWithOwnedErrorMsg(msg);
|
||||
return sema.failWithOwnedErrorMsg(block, msg);
|
||||
}
|
||||
vec_len = try sema.usizeCast(block, lhs_src, lhs_len);
|
||||
} else if (lhs_zig_ty_tag == .Vector or rhs_zig_ty_tag == .Vector) {
|
||||
@ -13132,7 +13142,7 @@ fn checkSimdBinOp(
|
||||
}
|
||||
break :msg msg;
|
||||
};
|
||||
return sema.failWithOwnedErrorMsg(msg);
|
||||
return sema.failWithOwnedErrorMsg(block, msg);
|
||||
}
|
||||
const result_ty = try sema.resolvePeerTypes(block, src, &.{ uncasted_lhs, uncasted_rhs }, .{
|
||||
.override = &[_]LazySrcLoc{ lhs_src, rhs_src },
|
||||
@ -14263,7 +14273,7 @@ fn validateVarType(
|
||||
|
||||
break :msg msg;
|
||||
};
|
||||
return sema.failWithOwnedErrorMsg(msg);
|
||||
return sema.failWithOwnedErrorMsg(block, msg);
|
||||
}
|
||||
|
||||
fn explainWhyTypeIsComptime(
|
||||
@ -15037,7 +15047,7 @@ fn namespaceLookup(
|
||||
try sema.mod.errNoteNonLazy(decl.srcLoc(), msg, "declared here", .{});
|
||||
break :msg msg;
|
||||
};
|
||||
return sema.failWithOwnedErrorMsg(msg);
|
||||
return sema.failWithOwnedErrorMsg(block, msg);
|
||||
}
|
||||
return decl;
|
||||
}
|
||||
@ -15961,7 +15971,7 @@ fn coerce(
|
||||
);
|
||||
break :msg msg;
|
||||
};
|
||||
return sema.failWithOwnedErrorMsg(msg);
|
||||
return sema.failWithOwnedErrorMsg(block, msg);
|
||||
};
|
||||
return sema.addConstant(
|
||||
dest_ty,
|
||||
@ -16844,7 +16854,7 @@ fn beginComptimePtrLoad(
|
||||
};
|
||||
return ComptimePtrLoadKit{
|
||||
.root_val = parent.root_val,
|
||||
.root_ty = parent.ty,
|
||||
.root_ty = parent.root_ty,
|
||||
.val = try parent.val.elemValue(sema.arena, elem_ptr.index),
|
||||
.ty = elem_ty,
|
||||
.byte_offset = byte_offset,
|
||||
@ -16860,7 +16870,7 @@ fn beginComptimePtrLoad(
|
||||
}
|
||||
return ComptimePtrLoadKit{
|
||||
.root_val = parent.root_val,
|
||||
.root_ty = parent.ty,
|
||||
.root_ty = parent.root_ty,
|
||||
.val = parent.val,
|
||||
.ty = parent.ty,
|
||||
.byte_offset = parent.byte_offset,
|
||||
@ -16888,7 +16898,7 @@ fn beginComptimePtrLoad(
|
||||
};
|
||||
return ComptimePtrLoadKit{
|
||||
.root_val = parent.root_val,
|
||||
.root_ty = parent.ty,
|
||||
.root_ty = parent.root_ty,
|
||||
.val = try parent.val.fieldValue(sema.arena, field_index),
|
||||
.ty = parent.ty.structFieldType(field_index),
|
||||
.byte_offset = byte_offset,
|
||||
@ -17034,7 +17044,7 @@ fn coerceEnumToUnion(
|
||||
try sema.addDeclaredHereNote(msg, union_ty);
|
||||
break :msg msg;
|
||||
};
|
||||
return sema.failWithOwnedErrorMsg(msg);
|
||||
return sema.failWithOwnedErrorMsg(block, msg);
|
||||
};
|
||||
|
||||
const enum_tag = try sema.coerce(block, tag_ty, inst, inst_src);
|
||||
@ -17049,7 +17059,7 @@ fn coerceEnumToUnion(
|
||||
try sema.addDeclaredHereNote(msg, union_ty);
|
||||
break :msg msg;
|
||||
};
|
||||
return sema.failWithOwnedErrorMsg(msg);
|
||||
return sema.failWithOwnedErrorMsg(block, msg);
|
||||
};
|
||||
const field = union_obj.fields.values()[field_index];
|
||||
const field_ty = try sema.resolveTypeFields(block, inst_src, field.ty);
|
||||
@ -17064,7 +17074,7 @@ fn coerceEnumToUnion(
|
||||
try sema.addDeclaredHereNote(msg, union_ty);
|
||||
break :msg msg;
|
||||
};
|
||||
return sema.failWithOwnedErrorMsg(msg);
|
||||
return sema.failWithOwnedErrorMsg(block, msg);
|
||||
};
|
||||
|
||||
return sema.addConstant(union_ty, try Value.Tag.@"union".create(sema.arena, .{
|
||||
@ -17084,7 +17094,7 @@ fn coerceEnumToUnion(
|
||||
try sema.addDeclaredHereNote(msg, tag_ty);
|
||||
break :msg msg;
|
||||
};
|
||||
return sema.failWithOwnedErrorMsg(msg);
|
||||
return sema.failWithOwnedErrorMsg(block, msg);
|
||||
}
|
||||
|
||||
// If the union has all fields 0 bits, the union value is just the enum value.
|
||||
@ -17102,7 +17112,7 @@ fn coerceEnumToUnion(
|
||||
try sema.addDeclaredHereNote(msg, union_ty);
|
||||
break :msg msg;
|
||||
};
|
||||
return sema.failWithOwnedErrorMsg(msg);
|
||||
return sema.failWithOwnedErrorMsg(block, msg);
|
||||
}
|
||||
|
||||
fn coerceAnonStructToUnion(
|
||||
@ -17131,7 +17141,7 @@ fn coerceAnonStructToUnion(
|
||||
try sema.addDeclaredHereNote(msg, union_ty);
|
||||
break :msg msg;
|
||||
};
|
||||
return sema.failWithOwnedErrorMsg(msg);
|
||||
return sema.failWithOwnedErrorMsg(block, msg);
|
||||
}
|
||||
|
||||
const field_name = anon_struct.names[0];
|
||||
@ -17176,7 +17186,7 @@ fn coerceArrayLike(
|
||||
try sema.errNote(block, inst_src, msg, "source has length {d}", .{inst_len});
|
||||
break :msg msg;
|
||||
};
|
||||
return sema.failWithOwnedErrorMsg(msg);
|
||||
return sema.failWithOwnedErrorMsg(block, msg);
|
||||
}
|
||||
|
||||
const target = sema.mod.getTarget();
|
||||
@ -17248,7 +17258,7 @@ fn coerceTupleToArray(
|
||||
try sema.errNote(block, inst_src, msg, "source has length {d}", .{inst_len});
|
||||
break :msg msg;
|
||||
};
|
||||
return sema.failWithOwnedErrorMsg(msg);
|
||||
return sema.failWithOwnedErrorMsg(block, msg);
|
||||
}
|
||||
|
||||
const element_vals = try sema.arena.alloc(Value, dest_len);
|
||||
@ -18446,7 +18456,7 @@ fn resolvePeerTypes(
|
||||
|
||||
break :msg msg;
|
||||
};
|
||||
return sema.failWithOwnedErrorMsg(msg);
|
||||
return sema.failWithOwnedErrorMsg(block, msg);
|
||||
}
|
||||
|
||||
const chosen_ty = sema.typeOf(chosen);
|
||||
|
||||
10
src/type.zig
10
src/type.zig
@ -2170,11 +2170,7 @@ pub const Type = extern union {
|
||||
.optional_single_mut_pointer,
|
||||
=> {
|
||||
const child_type = self.cast(Payload.ElemType).?.data;
|
||||
if (child_type.zigTypeTag() == .Opaque) {
|
||||
return 1;
|
||||
} else {
|
||||
return child_type.abiAlignment(target);
|
||||
}
|
||||
return child_type.abiAlignment(target);
|
||||
},
|
||||
|
||||
.manyptr_u8,
|
||||
@ -2188,8 +2184,6 @@ pub const Type = extern union {
|
||||
const ptr_info = self.castTag(.pointer).?.data;
|
||||
if (ptr_info.@"align" != 0) {
|
||||
return ptr_info.@"align";
|
||||
} else if (ptr_info.pointee_type.zigTypeTag() == .Opaque) {
|
||||
return 1;
|
||||
} else {
|
||||
return ptr_info.pointee_type.abiAlignment(target);
|
||||
}
|
||||
@ -2246,6 +2240,7 @@ pub const Type = extern union {
|
||||
.export_options,
|
||||
.extern_options,
|
||||
.@"opaque",
|
||||
.anyopaque,
|
||||
=> return 1,
|
||||
|
||||
.fn_noreturn_no_args, // represents machine code; not a pointer
|
||||
@ -2419,7 +2414,6 @@ pub const Type = extern union {
|
||||
|
||||
.empty_struct,
|
||||
.void,
|
||||
.anyopaque,
|
||||
.empty_struct_literal,
|
||||
.type,
|
||||
.comptime_int,
|
||||
|
||||
@ -747,7 +747,11 @@ fn maybe(x: bool) anyerror!?u32 {
|
||||
}
|
||||
|
||||
test "pointer to thread local array" {
|
||||
if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
|
||||
const s = "Hello world";
|
||||
std.mem.copy(u8, buffer[0..], s);
|
||||
|
||||
@ -391,7 +391,11 @@ test "@ptrToInt on null optional at comptime" {
|
||||
}
|
||||
|
||||
test "indexing array with sentinel returns correct type" {
|
||||
if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
|
||||
var s: [:0]const u8 = "abc";
|
||||
try testing.expectEqualSlices(u8, "*const u8", @typeName(@TypeOf(&s[0])));
|
||||
|
||||
@ -1183,7 +1183,10 @@ pub fn addCases(ctx: *TestContext) !void {
|
||||
\\ if (a == 10) @compileError("bad");
|
||||
\\ return a + b + c;
|
||||
\\}
|
||||
, &[_][]const u8{":8:18: error: bad"});
|
||||
, &[_][]const u8{
|
||||
":8:18: error: bad",
|
||||
":3:18: note: called from here",
|
||||
});
|
||||
|
||||
case.addCompareOutput(
|
||||
\\pub fn main() void {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user