mirror of
https://github.com/ziglang/zig.git
synced 2026-02-13 04:48:20 +00:00
Sema: fix crash when generating anon name on invalid code
Closes #15615
This commit is contained in:
parent
c0102ac1c8
commit
0958d5d7db
11
src/Sema.zig
11
src/Sema.zig
@ -2730,9 +2730,13 @@ fn createAnonymousDeclTypeNamed(
|
||||
for (fn_info.param_body) |zir_inst| switch (zir_tags[zir_inst]) {
|
||||
.param, .param_comptime, .param_anytype, .param_anytype_comptime => {
|
||||
const arg = sema.inst_map.get(zir_inst).?;
|
||||
// The comptime call code in analyzeCall already did this, so we're
|
||||
// just repeating it here and it's guaranteed to work.
|
||||
const arg_val = sema.resolveConstMaybeUndefVal(block, .unneeded, arg, "") catch unreachable;
|
||||
// If this is being called in a generic function then analyzeCall will
|
||||
// have already resolved the args and this will work.
|
||||
// If not then this is a struct type being returned from a non-generic
|
||||
// function and the name doesn't matter since it will later
|
||||
// result in a compile error.
|
||||
const arg_val = sema.resolveConstMaybeUndefVal(block, .unneeded, arg, "") catch
|
||||
return sema.createAnonymousDeclTypeNamed(block, src, typed_value, .anon, anon_prefix, null);
|
||||
|
||||
if (arg_i != 0) try buf.appendSlice(",");
|
||||
try buf.writer().print("{}", .{arg_val.fmtValue(sema.typeOf(arg), sema.mod)});
|
||||
@ -6562,7 +6566,6 @@ fn analyzeCall(
|
||||
) CompileError!Air.Inst.Ref {
|
||||
const mod = sema.mod;
|
||||
|
||||
|
||||
const callee_ty = sema.typeOf(func);
|
||||
const func_ty_info = func_ty.fnInfo();
|
||||
const fn_params_len = func_ty_info.param_types.len;
|
||||
|
||||
@ -917,7 +917,6 @@ const Writer = struct {
|
||||
|
||||
try s.writeAll("\n");
|
||||
try s.writeByteNTimes(' ', old_indent);
|
||||
try s.writeAll("}");
|
||||
}
|
||||
|
||||
fn writeWasmMemorySize(w: *Writer, s: anytype, inst: Air.Inst.Index) @TypeOf(s).Error!void {
|
||||
|
||||
@ -0,0 +1,10 @@
|
||||
pub export fn entry(param: usize) usize {
|
||||
return struct{ param };
|
||||
}
|
||||
|
||||
// error
|
||||
// backend=stage2
|
||||
// target=native
|
||||
//
|
||||
// :2:12: error: expected type 'usize', found 'type'
|
||||
// :1:35: note: function return type declared here
|
||||
Loading…
x
Reference in New Issue
Block a user