| author | |
| committer | |
| log | 1291f4aca46b2929d9ee9b265a2bfe5311e60861 |
| tree | ae9dbfdc4150b4f3941e1e686b4e931f2d8ccb85 |
| parent | f31e114f633f5d57f6d09a616f5997d83949f641 |
| parent | 72ac37952e00184dbbf727fb3e7d3477d5637a87 |
| signature |
fix `@embedFile("")` not giving a proper error4 files changed, 115 insertions(+), 100 deletions(-)
doc/langref.html.in+5-5| ... | @@ -8041,7 +8041,7 @@ pub const CallModifier = enum { | ... | @@ -8041,7 +8041,7 @@ pub const CallModifier = enum { |
| 8041 | {#header_close#} | 8041 | {#header_close#} |
| 8042 | 8042 | ||
| 8043 | {#header_open|@cDefine#} | 8043 | {#header_open|@cDefine#} |
| 8044 | <pre>{#syntax#}@cDefine(comptime name: []u8, value) void{#endsyntax#}</pre> | 8044 | <pre>{#syntax#}@cDefine(comptime name: []const u8, value) void{#endsyntax#}</pre> |
| 8045 | <p> | 8045 | <p> |
| 8046 | This function can only occur inside {#syntax#}@cImport{#endsyntax#}. | 8046 | This function can only occur inside {#syntax#}@cImport{#endsyntax#}. |
| 8047 | </p> | 8047 | </p> |
| ... | @@ -8085,7 +8085,7 @@ pub const CallModifier = enum { | ... | @@ -8085,7 +8085,7 @@ pub const CallModifier = enum { |
| 8085 | {#see_also|Import from C Header File|@cInclude|@cDefine|@cUndef#} | 8085 | {#see_also|Import from C Header File|@cInclude|@cDefine|@cUndef#} |
| 8086 | {#header_close#} | 8086 | {#header_close#} |
| 8087 | {#header_open|@cInclude#} | 8087 | {#header_open|@cInclude#} |
| 8088 | <pre>{#syntax#}@cInclude(comptime path: []u8) void{#endsyntax#}</pre> | 8088 | <pre>{#syntax#}@cInclude(comptime path: []const u8) void{#endsyntax#}</pre> |
| 8089 | <p> | 8089 | <p> |
| 8090 | This function can only occur inside {#syntax#}@cImport{#endsyntax#}. | 8090 | This function can only occur inside {#syntax#}@cImport{#endsyntax#}. |
| 8091 | </p> | 8091 | </p> |
| ... | @@ -8176,7 +8176,7 @@ fn cmpxchgWeakButNotAtomic(comptime T: type, ptr: *T, expected_value: T, new_val | ... | @@ -8176,7 +8176,7 @@ fn cmpxchgWeakButNotAtomic(comptime T: type, ptr: *T, expected_value: T, new_val |
| 8176 | {#header_close#} | 8176 | {#header_close#} |
| 8177 | 8177 | ||
| 8178 | {#header_open|@compileError#} | 8178 | {#header_open|@compileError#} |
| 8179 | <pre>{#syntax#}@compileError(comptime msg: []u8) noreturn{#endsyntax#}</pre> | 8179 | <pre>{#syntax#}@compileError(comptime msg: []const u8) noreturn{#endsyntax#}</pre> |
| 8180 | <p> | 8180 | <p> |
| 8181 | This function, when semantically analyzed, causes a compile error with the | 8181 | This function, when semantically analyzed, causes a compile error with the |
| 8182 | message {#syntax#}msg{#endsyntax#}. | 8182 | message {#syntax#}msg{#endsyntax#}. |
| ... | @@ -8267,7 +8267,7 @@ test "main" { | ... | @@ -8267,7 +8267,7 @@ test "main" { |
| 8267 | {#header_close#} | 8267 | {#header_close#} |
| 8268 | 8268 | ||
| 8269 | {#header_open|@cUndef#} | 8269 | {#header_open|@cUndef#} |
| 8270 | <pre>{#syntax#}@cUndef(comptime name: []u8) void{#endsyntax#}</pre> | 8270 | <pre>{#syntax#}@cUndef(comptime name: []const u8) void{#endsyntax#}</pre> |
| 8271 | <p> | 8271 | <p> |
| 8272 | This function can only occur inside {#syntax#}@cImport{#endsyntax#}. | 8272 | This function can only occur inside {#syntax#}@cImport{#endsyntax#}. |
| 8273 | </p> | 8273 | </p> |
| ... | @@ -8607,7 +8607,7 @@ test "@hasDecl" { | ... | @@ -8607,7 +8607,7 @@ test "@hasDecl" { |
| 8607 | {#header_close#} | 8607 | {#header_close#} |
| 8608 | 8608 | ||
| 8609 | {#header_open|@import#} | 8609 | {#header_open|@import#} |
| 8610 | <pre>{#syntax#}@import(comptime path: []u8) type{#endsyntax#}</pre> | 8610 | <pre>{#syntax#}@import(comptime path: []const u8) type{#endsyntax#}</pre> |
| 8611 | <p> | 8611 | <p> |
| 8612 | This function finds a zig file corresponding to {#syntax#}path{#endsyntax#} and adds it to the build, | 8612 | This function finds a zig file corresponding to {#syntax#}path{#endsyntax#} and adds it to the build, |
| 8613 | if it is not already added. | 8613 | if it is not already added. |
src/AstGen.zig+41-41| ... | @@ -2456,45 +2456,45 @@ fn blockExprStmts(gz: *GenZir, parent_scope: *Scope, statements: []const Ast.Nod | ... | @@ -2456,45 +2456,45 @@ fn blockExprStmts(gz: *GenZir, parent_scope: *Scope, statements: []const Ast.Nod |
| 2456 | while (true) { | 2456 | while (true) { |
| 2457 | switch (node_tags[inner_node]) { | 2457 | switch (node_tags[inner_node]) { |
| 2458 | // zig fmt: off | 2458 | // zig fmt: off |
| 2459 | .global_var_decl, | 2459 | .global_var_decl, |
| 2460 | .local_var_decl, | 2460 | .local_var_decl, |
| 2461 | .simple_var_decl, | 2461 | .simple_var_decl, |
| 2462 | .aligned_var_decl, => scope = try varDecl(gz, scope, statement, block_arena_allocator, tree.fullVarDecl(statement).?), | 2462 | .aligned_var_decl, => scope = try varDecl(gz, scope, statement, block_arena_allocator, tree.fullVarDecl(statement).?), |
| 2463 | 2463 | ||
| 2464 | .@"defer" => scope = try deferStmt(gz, scope, statement, block_arena_allocator, .defer_normal), | 2464 | .@"defer" => scope = try deferStmt(gz, scope, statement, block_arena_allocator, .defer_normal), |
| 2465 | .@"errdefer" => scope = try deferStmt(gz, scope, statement, block_arena_allocator, .defer_error), | 2465 | .@"errdefer" => scope = try deferStmt(gz, scope, statement, block_arena_allocator, .defer_error), |
| 2466 | 2466 | ||
| 2467 | .assign => try assign(gz, scope, statement), | 2467 | .assign => try assign(gz, scope, statement), |
| 2468 | 2468 | ||
| 2469 | .assign_shl => try assignShift(gz, scope, statement, .shl), | 2469 | .assign_shl => try assignShift(gz, scope, statement, .shl), |
| 2470 | .assign_shr => try assignShift(gz, scope, statement, .shr), | 2470 | .assign_shr => try assignShift(gz, scope, statement, .shr), |
| 2471 | 2471 | ||
| 2472 | .assign_bit_and => try assignOp(gz, scope, statement, .bit_and), | 2472 | .assign_bit_and => try assignOp(gz, scope, statement, .bit_and), |
| 2473 | .assign_bit_or => try assignOp(gz, scope, statement, .bit_or), | 2473 | .assign_bit_or => try assignOp(gz, scope, statement, .bit_or), |
| 2474 | .assign_bit_xor => try assignOp(gz, scope, statement, .xor), | 2474 | .assign_bit_xor => try assignOp(gz, scope, statement, .xor), |
| 2475 | .assign_div => try assignOp(gz, scope, statement, .div), | 2475 | .assign_div => try assignOp(gz, scope, statement, .div), |
| 2476 | .assign_sub => try assignOp(gz, scope, statement, .sub), | 2476 | .assign_sub => try assignOp(gz, scope, statement, .sub), |
| 2477 | .assign_sub_wrap => try assignOp(gz, scope, statement, .subwrap), | 2477 | .assign_sub_wrap => try assignOp(gz, scope, statement, .subwrap), |
| 2478 | .assign_mod => try assignOp(gz, scope, statement, .mod_rem), | 2478 | .assign_mod => try assignOp(gz, scope, statement, .mod_rem), |
| 2479 | .assign_add => try assignOp(gz, scope, statement, .add), | 2479 | .assign_add => try assignOp(gz, scope, statement, .add), |
| 2480 | .assign_add_wrap => try assignOp(gz, scope, statement, .addwrap), | 2480 | .assign_add_wrap => try assignOp(gz, scope, statement, .addwrap), |
| 2481 | .assign_mul => try assignOp(gz, scope, statement, .mul), | 2481 | .assign_mul => try assignOp(gz, scope, statement, .mul), |
| 2482 | .assign_mul_wrap => try assignOp(gz, scope, statement, .mulwrap), | 2482 | .assign_mul_wrap => try assignOp(gz, scope, statement, .mulwrap), |
| 2483 | 2483 | ||
| 2484 | .grouped_expression => { | 2484 | .grouped_expression => { |
| 2485 | inner_node = node_data[statement].lhs; | 2485 | inner_node = node_data[statement].lhs; |
| 2486 | continue; | 2486 | continue; |
| 2487 | }, | 2487 | }, |
| 2488 | 2488 | ||
| 2489 | .while_simple, | 2489 | .while_simple, |
| 2490 | .while_cont, | 2490 | .while_cont, |
| 2491 | .@"while", => _ = try whileExpr(gz, scope, .{ .rl = .none }, inner_node, tree.fullWhile(inner_node).?, true), | 2491 | .@"while", => _ = try whileExpr(gz, scope, .{ .rl = .none }, inner_node, tree.fullWhile(inner_node).?, true), |
| 2492 | 2492 | ||
| 2493 | .for_simple, | 2493 | .for_simple, |
| 2494 | .@"for", => _ = try forExpr(gz, scope, .{ .rl = .none }, inner_node, tree.fullFor(inner_node).?, true), | 2494 | .@"for", => _ = try forExpr(gz, scope, .{ .rl = .none }, inner_node, tree.fullFor(inner_node).?, true), |
| 2495 | 2495 | ||
| 2496 | else => noreturn_src_node = try unusedResultExpr(gz, scope, inner_node), | 2496 | else => noreturn_src_node = try unusedResultExpr(gz, scope, inner_node), |
| 2497 | // zig fmt: on | 2497 | // zig fmt: on |
| 2498 | } | 2498 | } |
| 2499 | break; | 2499 | break; |
| 2500 | } | 2500 | } |
| ... | @@ -8428,11 +8428,11 @@ fn builtinCall( | ... | @@ -8428,11 +8428,11 @@ fn builtinCall( |
| 8428 | .bit_size_of => return simpleUnOpType(gz, scope, ri, node, params[0], .bit_size_of), | 8428 | .bit_size_of => return simpleUnOpType(gz, scope, ri, node, params[0], .bit_size_of), |
| 8429 | .align_of => return simpleUnOpType(gz, scope, ri, node, params[0], .align_of), | 8429 | .align_of => return simpleUnOpType(gz, scope, ri, node, params[0], .align_of), |
| 8430 | 8430 | ||
| 8431 | .int_from_ptr => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .int_from_ptr), | 8431 | .int_from_ptr => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .int_from_ptr), |
| 8432 | .compile_error => return simpleUnOp(gz, scope, ri, node, .{ .rl = .{ .ty = .slice_const_u8_type } }, params[0], .compile_error), | 8432 | .compile_error => return simpleUnOp(gz, scope, ri, node, .{ .rl = .{ .ty = .slice_const_u8_type } }, params[0], .compile_error), |
| 8433 | .set_eval_branch_quota => return simpleUnOp(gz, scope, ri, node, .{ .rl = .{ .coerced_ty = .u32_type } }, params[0], .set_eval_branch_quota), | 8433 | .set_eval_branch_quota => return simpleUnOp(gz, scope, ri, node, .{ .rl = .{ .coerced_ty = .u32_type } }, params[0], .set_eval_branch_quota), |
| 8434 | .int_from_enum => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .int_from_enum), | 8434 | .int_from_enum => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .int_from_enum), |
| 8435 | .int_from_bool => return simpleUnOp(gz, scope, ri, node, bool_ri, params[0], .int_from_bool), | 8435 | .int_from_bool => return simpleUnOp(gz, scope, ri, node, bool_ri, params[0], .int_from_bool), |
| 8436 | .embed_file => return simpleUnOp(gz, scope, ri, node, .{ .rl = .{ .ty = .slice_const_u8_type } }, params[0], .embed_file), | 8436 | .embed_file => return simpleUnOp(gz, scope, ri, node, .{ .rl = .{ .ty = .slice_const_u8_type } }, params[0], .embed_file), |
| 8437 | .error_name => return simpleUnOp(gz, scope, ri, node, .{ .rl = .{ .ty = .anyerror_type } }, params[0], .error_name), | 8437 | .error_name => return simpleUnOp(gz, scope, ri, node, .{ .rl = .{ .ty = .anyerror_type } }, params[0], .error_name), |
| 8438 | .set_runtime_safety => return simpleUnOp(gz, scope, ri, node, bool_ri, params[0], .set_runtime_safety), | 8438 | .set_runtime_safety => return simpleUnOp(gz, scope, ri, node, bool_ri, params[0], .set_runtime_safety), |
| ... | @@ -8550,8 +8550,8 @@ fn builtinCall( | ... | @@ -8550,8 +8550,8 @@ fn builtinCall( |
| 8550 | .shl_exact => return shiftOp(gz, scope, ri, node, params[0], params[1], .shl_exact), | 8550 | .shl_exact => return shiftOp(gz, scope, ri, node, params[0], params[1], .shl_exact), |
| 8551 | .shr_exact => return shiftOp(gz, scope, ri, node, params[0], params[1], .shr_exact), | 8551 | .shr_exact => return shiftOp(gz, scope, ri, node, params[0], params[1], .shr_exact), |
| 8552 | 8552 | ||
| 8553 | .bit_offset_of => return offsetOf(gz, scope, ri, node, params[0], params[1], .bit_offset_of), | 8553 | .bit_offset_of => return offsetOf(gz, scope, ri, node, params[0], params[1], .bit_offset_of), |
| 8554 | .offset_of => return offsetOf(gz, scope, ri, node, params[0], params[1], .offset_of), | 8554 | .offset_of => return offsetOf(gz, scope, ri, node, params[0], params[1], .offset_of), |
| 8555 | 8555 | ||
| 8556 | .c_undef => return simpleCBuiltin(gz, scope, ri, node, params[0], .c_undef), | 8556 | .c_undef => return simpleCBuiltin(gz, scope, ri, node, params[0], .c_undef), |
| 8557 | .c_include => return simpleCBuiltin(gz, scope, ri, node, params[0], .c_include), | 8557 | .c_include => return simpleCBuiltin(gz, scope, ri, node, params[0], .c_include), |
src/Sema.zig+58-54| ... | @@ -1020,8 +1020,8 @@ fn analyzeBodyInner( | ... | @@ -1020,8 +1020,8 @@ fn analyzeBodyInner( |
| 1020 | .elem_type_index => try sema.zirElemTypeIndex(block, inst), | 1020 | .elem_type_index => try sema.zirElemTypeIndex(block, inst), |
| 1021 | .elem_type => try sema.zirElemType(block, inst), | 1021 | .elem_type => try sema.zirElemType(block, inst), |
| 1022 | .enum_literal => try sema.zirEnumLiteral(block, inst), | 1022 | .enum_literal => try sema.zirEnumLiteral(block, inst), |
| 1023 | .int_from_enum => try sema.zirIntFromEnum(block, inst), | 1023 | .int_from_enum => try sema.zirIntFromEnum(block, inst), |
| 1024 | .enum_from_int => try sema.zirEnumFromInt(block, inst), | 1024 | .enum_from_int => try sema.zirEnumFromInt(block, inst), |
| 1025 | .err_union_code => try sema.zirErrUnionCode(block, inst), | 1025 | .err_union_code => try sema.zirErrUnionCode(block, inst), |
| 1026 | .err_union_code_ptr => try sema.zirErrUnionCodePtr(block, inst), | 1026 | .err_union_code_ptr => try sema.zirErrUnionCodePtr(block, inst), |
| 1027 | .err_union_payload_unsafe => try sema.zirErrUnionPayload(block, inst), | 1027 | .err_union_payload_unsafe => try sema.zirErrUnionPayload(block, inst), |
| ... | @@ -1087,18 +1087,18 @@ fn analyzeBodyInner( | ... | @@ -1087,18 +1087,18 @@ fn analyzeBodyInner( |
| 1087 | .union_init => try sema.zirUnionInit(block, inst), | 1087 | .union_init => try sema.zirUnionInit(block, inst), |
| 1088 | .field_type => try sema.zirFieldType(block, inst), | 1088 | .field_type => try sema.zirFieldType(block, inst), |
| 1089 | .field_type_ref => try sema.zirFieldTypeRef(block, inst), | 1089 | .field_type_ref => try sema.zirFieldTypeRef(block, inst), |
| 1090 | .int_from_ptr => try sema.zirIntFromPtr(block, inst), | 1090 | .int_from_ptr => try sema.zirIntFromPtr(block, inst), |
| 1091 | .align_of => try sema.zirAlignOf(block, inst), | 1091 | .align_of => try sema.zirAlignOf(block, inst), |
| 1092 | .int_from_bool => try sema.zirIntFromBool(block, inst), | 1092 | .int_from_bool => try sema.zirIntFromBool(block, inst), |
| 1093 | .embed_file => try sema.zirEmbedFile(block, inst), | 1093 | .embed_file => try sema.zirEmbedFile(block, inst), |
| 1094 | .error_name => try sema.zirErrorName(block, inst), | 1094 | .error_name => try sema.zirErrorName(block, inst), |
| 1095 | .tag_name => try sema.zirTagName(block, inst), | 1095 | .tag_name => try sema.zirTagName(block, inst), |
| 1096 | .type_name => try sema.zirTypeName(block, inst), | 1096 | .type_name => try sema.zirTypeName(block, inst), |
| 1097 | .frame_type => try sema.zirFrameType(block, inst), | 1097 | .frame_type => try sema.zirFrameType(block, inst), |
| 1098 | .frame_size => try sema.zirFrameSize(block, inst), | 1098 | .frame_size => try sema.zirFrameSize(block, inst), |
| 1099 | .int_from_float => try sema.zirIntFromFloat(block, inst), | 1099 | .int_from_float => try sema.zirIntFromFloat(block, inst), |
| 1100 | .float_from_int => try sema.zirFloatFromInt(block, inst), | 1100 | .float_from_int => try sema.zirFloatFromInt(block, inst), |
| 1101 | .ptr_from_int => try sema.zirPtrFromInt(block, inst), | 1101 | .ptr_from_int => try sema.zirPtrFromInt(block, inst), |
| 1102 | .float_cast => try sema.zirFloatCast(block, inst), | 1102 | .float_cast => try sema.zirFloatCast(block, inst), |
| 1103 | .int_cast => try sema.zirIntCast(block, inst), | 1103 | .int_cast => try sema.zirIntCast(block, inst), |
| 1104 | .ptr_cast => try sema.zirPtrCast(block, inst), | 1104 | .ptr_cast => try sema.zirPtrCast(block, inst), |
| ... | @@ -1193,53 +1193,53 @@ fn analyzeBodyInner( | ... | @@ -1193,53 +1193,53 @@ fn analyzeBodyInner( |
| 1193 | const extended = datas[inst].extended; | 1193 | const extended = datas[inst].extended; |
| 1194 | break :ext switch (extended.opcode) { | 1194 | break :ext switch (extended.opcode) { |
| 1195 | // zig fmt: off | 1195 | // zig fmt: off |
| 1196 | .variable => try sema.zirVarExtended( block, extended), | 1196 | .variable => try sema.zirVarExtended( block, extended), |
| 1197 | .struct_decl => try sema.zirStructDecl( block, extended, inst), | 1197 | .struct_decl => try sema.zirStructDecl( block, extended, inst), |
| 1198 | .enum_decl => try sema.zirEnumDecl( block, extended, inst), | 1198 | .enum_decl => try sema.zirEnumDecl( block, extended, inst), |
| 1199 | .union_decl => try sema.zirUnionDecl( block, extended, inst), | 1199 | .union_decl => try sema.zirUnionDecl( block, extended, inst), |
| 1200 | .opaque_decl => try sema.zirOpaqueDecl( block, extended, inst), | 1200 | .opaque_decl => try sema.zirOpaqueDecl( block, extended, inst), |
| 1201 | .this => try sema.zirThis( block, extended), | 1201 | .this => try sema.zirThis( block, extended), |
| 1202 | .ret_addr => try sema.zirRetAddr( block, extended), | 1202 | .ret_addr => try sema.zirRetAddr( block, extended), |
| 1203 | .builtin_src => try sema.zirBuiltinSrc( block, extended), | 1203 | .builtin_src => try sema.zirBuiltinSrc( block, extended), |
| 1204 | .error_return_trace => try sema.zirErrorReturnTrace( block), | 1204 | .error_return_trace => try sema.zirErrorReturnTrace( block), |
| 1205 | .frame => try sema.zirFrame( block, extended), | 1205 | .frame => try sema.zirFrame( block, extended), |
| 1206 | .frame_address => try sema.zirFrameAddress( block, extended), | 1206 | .frame_address => try sema.zirFrameAddress( block, extended), |
| 1207 | .alloc => try sema.zirAllocExtended( block, extended), | 1207 | .alloc => try sema.zirAllocExtended( block, extended), |
| 1208 | .builtin_extern => try sema.zirBuiltinExtern( block, extended), | 1208 | .builtin_extern => try sema.zirBuiltinExtern( block, extended), |
| 1209 | .@"asm" => try sema.zirAsm( block, extended, false), | 1209 | .@"asm" => try sema.zirAsm( block, extended, false), |
| 1210 | .asm_expr => try sema.zirAsm( block, extended, true), | 1210 | .asm_expr => try sema.zirAsm( block, extended, true), |
| 1211 | .typeof_peer => try sema.zirTypeofPeer( block, extended), | 1211 | .typeof_peer => try sema.zirTypeofPeer( block, extended), |
| 1212 | .compile_log => try sema.zirCompileLog( extended), | 1212 | .compile_log => try sema.zirCompileLog( extended), |
| 1213 | .min_multi => try sema.zirMinMaxMulti( block, extended, .min), | 1213 | .min_multi => try sema.zirMinMaxMulti( block, extended, .min), |
| 1214 | .max_multi => try sema.zirMinMaxMulti( block, extended, .max), | 1214 | .max_multi => try sema.zirMinMaxMulti( block, extended, .max), |
| 1215 | .add_with_overflow => try sema.zirOverflowArithmetic(block, extended, extended.opcode), | 1215 | .add_with_overflow => try sema.zirOverflowArithmetic(block, extended, extended.opcode), |
| 1216 | .sub_with_overflow => try sema.zirOverflowArithmetic(block, extended, extended.opcode), | 1216 | .sub_with_overflow => try sema.zirOverflowArithmetic(block, extended, extended.opcode), |
| 1217 | .mul_with_overflow => try sema.zirOverflowArithmetic(block, extended, extended.opcode), | 1217 | .mul_with_overflow => try sema.zirOverflowArithmetic(block, extended, extended.opcode), |
| 1218 | .shl_with_overflow => try sema.zirOverflowArithmetic(block, extended, extended.opcode), | 1218 | .shl_with_overflow => try sema.zirOverflowArithmetic(block, extended, extended.opcode), |
| 1219 | .c_undef => try sema.zirCUndef( block, extended), | 1219 | .c_undef => try sema.zirCUndef( block, extended), |
| 1220 | .c_include => try sema.zirCInclude( block, extended), | 1220 | .c_include => try sema.zirCInclude( block, extended), |
| 1221 | .c_define => try sema.zirCDefine( block, extended), | 1221 | .c_define => try sema.zirCDefine( block, extended), |
| 1222 | .wasm_memory_size => try sema.zirWasmMemorySize( block, extended), | 1222 | .wasm_memory_size => try sema.zirWasmMemorySize( block, extended), |
| 1223 | .wasm_memory_grow => try sema.zirWasmMemoryGrow( block, extended), | 1223 | .wasm_memory_grow => try sema.zirWasmMemoryGrow( block, extended), |
| 1224 | .prefetch => try sema.zirPrefetch( block, extended), | 1224 | .prefetch => try sema.zirPrefetch( block, extended), |
| 1225 | .err_set_cast => try sema.zirErrSetCast( block, extended), | 1225 | .err_set_cast => try sema.zirErrSetCast( block, extended), |
| 1226 | .await_nosuspend => try sema.zirAwaitNosuspend( block, extended), | 1226 | .await_nosuspend => try sema.zirAwaitNosuspend( block, extended), |
| 1227 | .select => try sema.zirSelect( block, extended), | 1227 | .select => try sema.zirSelect( block, extended), |
| 1228 | .int_from_error => try sema.zirIntFromError( block, extended), | 1228 | .int_from_error => try sema.zirIntFromError( block, extended), |
| 1229 | .error_from_int => try sema.zirErrorFromInt( block, extended), | 1229 | .error_from_int => try sema.zirErrorFromInt( block, extended), |
| 1230 | .reify => try sema.zirReify( block, extended, inst), | 1230 | .reify => try sema.zirReify( block, extended, inst), |
| 1231 | .builtin_async_call => try sema.zirBuiltinAsyncCall( block, extended), | 1231 | .builtin_async_call => try sema.zirBuiltinAsyncCall( block, extended), |
| 1232 | .cmpxchg => try sema.zirCmpxchg( block, extended), | 1232 | .cmpxchg => try sema.zirCmpxchg( block, extended), |
| 1233 | .c_va_arg => try sema.zirCVaArg( block, extended), | 1233 | .c_va_arg => try sema.zirCVaArg( block, extended), |
| 1234 | .c_va_copy => try sema.zirCVaCopy( block, extended), | 1234 | .c_va_copy => try sema.zirCVaCopy( block, extended), |
| 1235 | .c_va_end => try sema.zirCVaEnd( block, extended), | 1235 | .c_va_end => try sema.zirCVaEnd( block, extended), |
| 1236 | .c_va_start => try sema.zirCVaStart( block, extended), | 1236 | .c_va_start => try sema.zirCVaStart( block, extended), |
| 1237 | .ptr_cast_full => try sema.zirPtrCastFull( block, extended), | 1237 | .ptr_cast_full => try sema.zirPtrCastFull( block, extended), |
| 1238 | .ptr_cast_no_dest => try sema.zirPtrCastNoDest( block, extended), | 1238 | .ptr_cast_no_dest => try sema.zirPtrCastNoDest( block, extended), |
| 1239 | .work_item_id => try sema.zirWorkItem( block, extended, extended.opcode), | 1239 | .work_item_id => try sema.zirWorkItem( block, extended, extended.opcode), |
| 1240 | .work_group_size => try sema.zirWorkItem( block, extended, extended.opcode), | 1240 | .work_group_size => try sema.zirWorkItem( block, extended, extended.opcode), |
| 1241 | .work_group_id => try sema.zirWorkItem( block, extended, extended.opcode), | 1241 | .work_group_id => try sema.zirWorkItem( block, extended, extended.opcode), |
| 1242 | .in_comptime => try sema.zirInComptime( block), | 1242 | .in_comptime => try sema.zirInComptime( block), |
| 1243 | // zig fmt: on | 1243 | // zig fmt: on |
| 1244 | 1244 | ||
| 1245 | .fence => { | 1245 | .fence => { |
| ... | @@ -12633,6 +12633,10 @@ fn zirEmbedFile(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!A | ... | @@ -12633,6 +12633,10 @@ fn zirEmbedFile(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!A |
| 12633 | const operand_src: LazySrcLoc = .{ .node_offset_builtin_call_arg0 = inst_data.src_node }; | 12633 | const operand_src: LazySrcLoc = .{ .node_offset_builtin_call_arg0 = inst_data.src_node }; |
| 12634 | const name = try sema.resolveConstString(block, operand_src, inst_data.operand, "file path name must be comptime-known"); | 12634 | const name = try sema.resolveConstString(block, operand_src, inst_data.operand, "file path name must be comptime-known"); |
| 12635 | 12635 | ||
| 12636 | if (name.len == 0) { | ||
| 12637 | return sema.fail(block, operand_src, "file path name cannot be empty", .{}); | ||
| 12638 | } | ||
| 12639 | |||
| 12636 | const embed_file = mod.embedFile(block.getFileScope(mod), name) catch |err| switch (err) { | 12640 | const embed_file = mod.embedFile(block.getFileScope(mod), name) catch |err| switch (err) { |
| 12637 | error.ImportOutsidePkgPath => { | 12641 | error.ImportOutsidePkgPath => { |
| 12638 | return sema.fail(block, operand_src, "embed of file outside package path: '{s}'", .{name}); | 12642 | return sema.fail(block, operand_src, "embed of file outside package path: '{s}'", .{name}); |
test/cases/compile_errors/@embedFile_with_empty_path.zig created+11| ... | @@ -0,0 +1,11 @@ | ||
| 1 | const resource = @embedFile(""); | ||
| 2 | |||
| 3 | export fn entry() usize { | ||
| 4 | return @sizeOf(@TypeOf(resource)); | ||
| 5 | } | ||
| 6 | |||
| 7 | // error | ||
| 8 | // backend=stage2 | ||
| 9 | // target=native | ||
| 10 | // | ||
| 11 | // :1:29: error: file path name cannot be empty | ||