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,
9494
9595release_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.
9898is_root: bool = false,
9999
100100pub const ReleaseMode = enum {
lib/std/Build/Module.zig+2-3
......@@ -25,7 +25,6 @@ stack_check: ?bool,
2525sanitize_c: ?bool,
2626sanitize_thread: ?bool,
2727fuzz: ?bool,
28allow_deprecated: ?bool,
2928code_model: std.builtin.CodeModel,
3029valgrind: ?bool,
3130pic: ?bool,
......@@ -285,7 +284,6 @@ pub fn init(
285284 .owner = owner,
286285 .root_source_file = if (options.root_source_file) |lp| lp.dupe(owner) else null,
287286 .import_table = .{},
288 .allow_deprecated = owner.graph.allow_deprecated orelse !owner.is_root,
289287 .resolved_target = options.target,
290288 .optimize = options.optimize,
291289 .link_libc = options.link_libc,
......@@ -560,7 +558,8 @@ pub fn appendZigProcessFlags(
560558 try addFlag(zig_args, m.red_zone, "-mred-zone", "-mno-red-zone");
561559
562560 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");
564563 }
565564
566565 if (m.dwarf_format) |dwarf_format| {
lib/std/zig/Zir.zig+1-1
......@@ -4313,7 +4313,6 @@ fn findTrackableInner(
43134313 .value_placeholder => unreachable,
43144314
43154315 // Once again, we start with the boring tags.
4316 .deprecated,
43174316 .this,
43184317 .ret_addr,
43194318 .builtin_src,
......@@ -4367,6 +4366,7 @@ fn findTrackableInner(
43674366 .tuple_decl,
43684367 .dbg_empty_stmt,
43694368 .astgen_error,
4369 .deprecated,
43704370 => return,
43714371
43724372 // `@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 {
250250 ":1:5: error: expected expression, found 'invalid token'",
251251 });
252252 }
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 }
267253}
test/tests.zig+3-3
......@@ -1199,13 +1199,13 @@ pub fn addCliTests(b: *std.Build) *Step {
11991199 \\}
12001200 ;
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");
12031203 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");
12061206 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");
12091209 }
12101210
12111211 const init_exe = b.addSystemCommand(&.{ b.graph.zig_exe, "init" });