authorgravatar for robin@voetter.nlRobin Voetter <robin@voetter.nl> 2021-09-02 14:49:24+02:00
committergravatar for robin@voetter.nlRobin Voetter <robin@voetter.nl> 2021-09-20 02:29:03+02:00
logcfbe9a6f61c98cb1b18e18aa6a4acf7785590953
tree2727428c4159e89f50d853d3cea17d7ca827d38c
parent805e1bffbdcab84717356fb1a7b375369407d9c2

Address spaces: Forbid addrspace and linksection for local variables


1 files changed, 9 insertions(+), 0 deletions(-)

src/AstGen.zig+9
...@@ -2377,6 +2377,7 @@ fn varDecl(...@@ -2377,6 +2377,7 @@ fn varDecl(
2377 const gpa = astgen.gpa;2377 const gpa = astgen.gpa;
2378 const tree = astgen.tree;2378 const tree = astgen.tree;
2379 const token_tags = tree.tokens.items(.tag);2379 const token_tags = tree.tokens.items(.tag);
2380 const main_tokens = tree.nodes.items(.main_token);
23802381
2381 const name_token = var_decl.ast.mut_token + 1;2382 const name_token = var_decl.ast.mut_token + 1;
2382 const ident_name_raw = tree.tokenSlice(name_token);2383 const ident_name_raw = tree.tokenSlice(name_token);
...@@ -2391,6 +2392,14 @@ fn varDecl(...@@ -2391,6 +2392,14 @@ fn varDecl(
2391 return astgen.failNode(node, "variables must be initialized", .{});2392 return astgen.failNode(node, "variables must be initialized", .{});
2392 }2393 }
23932394
2395 if (var_decl.ast.addrspace_node != 0) {
2396 return astgen.failTok(main_tokens[var_decl.ast.addrspace_node], "cannot set address space of local variable '{s}'", .{ ident_name_raw });
2397 }
2398
2399 if (var_decl.ast.section_node != 0) {
2400 return astgen.failTok(main_tokens[var_decl.ast.section_node], "cannot set section of local variable '{s}'", .{ ident_name_raw });
2401 }
2402
2394 const align_inst: Zir.Inst.Ref = if (var_decl.ast.align_node != 0)2403 const align_inst: Zir.Inst.Ref = if (var_decl.ast.align_node != 0)
2395 try expr(gz, scope, align_rl, var_decl.ast.align_node)2404 try expr(gz, scope, align_rl, var_decl.ast.align_node)
2396 else2405 else