authorgravatar for kappaloris@gmail.comLoris Cro <kappaloris@gmail.com> 2025-02-23 18:15:27+01:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-02-26 14:41:33-05:00
log25790e95f1e8563f439bb13c460fdd4a46e68c43
treea0e62a31174791bae27090d9baf730d4ee1155fd
parente3da2852f421ec2e7d568373b3f29030818e1d77

`@deprecated`: remove per-module flag in Build

This implementation looks at the builder of each module in the build graph instead of storing a boolean for each module.

6 files changed, 16 insertions(+), 22 deletions(-)

lib/std/Build.zig+1-1
...@@ -94,7 +94,7 @@ available_deps: AvailableDeps,...@@ -94,7 +94,7 @@ available_deps: AvailableDeps,
9494
95release_mode: ReleaseMode,95release_mode: ReleaseMode,
9696
97// True only for the top-level builder.97/// `true` only for the root `Build`; `false` for any `Build` belonging to a dependency.
98is_root: bool = false,98is_root: bool = false,
9999
100pub const ReleaseMode = enum {100pub const ReleaseMode = enum {
lib/std/Build/Module.zig+2-3
...@@ -25,7 +25,6 @@ stack_check: ?bool,...@@ -25,7 +25,6 @@ stack_check: ?bool,
25sanitize_c: ?bool,25sanitize_c: ?bool,
26sanitize_thread: ?bool,26sanitize_thread: ?bool,
27fuzz: ?bool,27fuzz: ?bool,
28allow_deprecated: ?bool,
29code_model: std.builtin.CodeModel,28code_model: std.builtin.CodeModel,
30valgrind: ?bool,29valgrind: ?bool,
31pic: ?bool,30pic: ?bool,
...@@ -285,7 +284,6 @@ pub fn init(...@@ -285,7 +284,6 @@ pub fn init(
285 .owner = owner,284 .owner = owner,
286 .root_source_file = if (options.root_source_file) |lp| lp.dupe(owner) else null,285 .root_source_file = if (options.root_source_file) |lp| lp.dupe(owner) else null,
287 .import_table = .{},286 .import_table = .{},
288 .allow_deprecated = owner.graph.allow_deprecated orelse !owner.is_root,
289 .resolved_target = options.target,287 .resolved_target = options.target,
290 .optimize = options.optimize,288 .optimize = options.optimize,
291 .link_libc = options.link_libc,289 .link_libc = options.link_libc,
...@@ -560,7 +558,8 @@ pub fn appendZigProcessFlags(...@@ -560,7 +558,8 @@ pub fn appendZigProcessFlags(
560 try addFlag(zig_args, m.red_zone, "-mred-zone", "-mno-red-zone");558 try addFlag(zig_args, m.red_zone, "-mred-zone", "-mno-red-zone");
561559
562 if (m.root_source_file != null) {560 if (m.root_source_file != null) {
563 try addFlag(zig_args, m.allow_deprecated, "-fallow-deprecated", "-fno-allow-deprecated");561 const allow_deprecated = m.owner.graph.allow_deprecated orelse !m.owner.is_root;
562 try addFlag(zig_args, allow_deprecated, "-fallow-deprecated", "-fno-allow-deprecated");
564 }563 }
565564
566 if (m.dwarf_format) |dwarf_format| {565 if (m.dwarf_format) |dwarf_format| {
lib/std/zig/Zir.zig+1-1
...@@ -4313,7 +4313,6 @@ fn findTrackableInner(...@@ -4313,7 +4313,6 @@ fn findTrackableInner(
4313 .value_placeholder => unreachable,4313 .value_placeholder => unreachable,
43144314
4315 // Once again, we start with the boring tags.4315 // Once again, we start with the boring tags.
4316 .deprecated,
4317 .this,4316 .this,
4318 .ret_addr,4317 .ret_addr,
4319 .builtin_src,4318 .builtin_src,
...@@ -4367,6 +4366,7 @@ fn findTrackableInner(...@@ -4367,6 +4366,7 @@ fn findTrackableInner(
4367 .tuple_decl,4366 .tuple_decl,
4368 .dbg_empty_stmt,4367 .dbg_empty_stmt,
4369 .astgen_error,4368 .astgen_error,
4369 .deprecated,
4370 => return,4370 => return,
43714371
4372 // `@TypeOf` has a body.4372 // `@TypeOf` has a body.
test/cases/compile_errors/deprecated.zig created+9
...@@ -0,0 +1,9 @@
1const bad = @deprecated(42);
2
3pub export fn foo() usize {
4 return bad;
5}
6
7// error
8//
9// :1:13: error: found deprecated code
test/compile_errors.zig-14
...@@ -250,18 +250,4 @@ pub fn addCases(ctx: *Cases, b: *std.Build) !void {...@@ -250,18 +250,4 @@ pub fn addCases(ctx: *Cases, b: *std.Build) !void {
250 ":1:5: error: expected expression, found 'invalid token'",250 ":1:5: error: expected expression, found 'invalid token'",
251 });251 });
252 }252 }
253
254 {
255 const case = ctx.obj("usage of deprecated code", b.graph.host);
256
257 case.addError(
258 \\const bad = @deprecated(42);
259 \\
260 \\pub export fn foo() usize {
261 \\ return bad;
262 \\}
263 , &[_][]const u8{
264 ":1:13: error: found deprecated code",
265 });
266 }
267}253}
test/tests.zig+3-3
...@@ -1199,13 +1199,13 @@ pub fn addCliTests(b: *std.Build) *Step {...@@ -1199,13 +1199,13 @@ pub fn addCliTests(b: *std.Build) *Step {
1199 \\}1199 \\}
1200 ;1200 ;
12011201
1202 var src_dir = std.fs.cwd().makeOpenPath(b.pathJoin(&.{ tmp_path, "src" }), .{}) catch unreachable;1202 var src_dir = std.fs.cwd().makeOpenPath(b.pathJoin(&.{ tmp_path, "src" }), .{}) catch @panic("unable to create tmp path");
1203 defer src_dir.close();1203 defer src_dir.close();
12041204
1205 var main = src_dir.createFile("main.zig", .{}) catch unreachable;1205 var main = src_dir.createFile("main.zig", .{}) catch @panic("unable to create main.zig");
1206 defer main.close();1206 defer main.close();
12071207
1208 main.writeAll(new_main_src) catch unreachable;1208 main.writeAll(new_main_src) catch @panic("unable to write to main.zig");
1209 }1209 }
12101210
1211 const init_exe = b.addSystemCommand(&.{ b.graph.zig_exe, "init" });1211 const init_exe = b.addSystemCommand(&.{ b.graph.zig_exe, "init" });