authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-07-21 22:46:41-07:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2023-07-21 22:46:41-07:00
log1291f4aca46b2929d9ee9b265a2bfe5311e60861
treeae9dbfdc4150b4f3941e1e686b4e931f2d8ccb85
parentf31e114f633f5d57f6d09a616f5997d83949f641
parent72ac37952e00184dbbf727fb3e7d3477d5637a87
signaturebadge-question-mark Signed by PGP key 4AEE18F83AFDEB23

Merge pull request #16480 from r00ster91/embedfile

fix `@embedFile("")` not giving a proper error

4 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#}
80428042
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#}
81778177
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 the8181 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#}
82688268
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#}
86088608
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: off2458 // 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).?),
24632463
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),
24662466
2467 .assign => try assign(gz, scope, statement),2467 .assign => try assign(gz, scope, statement),
24682468
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),
24712471
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),
24832483
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 },
24882488
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),
24922492
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),
24952495
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: on2497 // 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),
84308430
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),
85528552
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),
85558555
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: off1195 // 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: on1243 // zig fmt: on
12441244
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");
1263512635
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 @@
1const resource = @embedFile("");
2
3export 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