Skip to content

Commit 63fa643

Browse files
authored
cargo_build_script: Add support for -fsanitize-ignorelist= (#2935)
This is trivial copy/paste implementation, to minimize regression probability. Previously it was combined with refactoring, but introduced regression and was reverted #2911. This time I split refactoring into follow up PR.
1 parent ded96a9 commit 63fa643

File tree

3 files changed

+47
-1
lines changed

3 files changed

+47
-1
lines changed

cargo/private/cargo_build_script.bzl

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,8 +192,26 @@ def _pwd_flags_isystem(args):
192192

193193
return res
194194

195+
def _pwd_flags_fsanitize_ignorelist(args):
196+
"""Prefix execroot-relative paths of known arguments with ${pwd}.
197+
198+
Args:
199+
args (list): List of tool arguments.
200+
201+
Returns:
202+
list: The modified argument list.
203+
"""
204+
res = []
205+
for arg in args:
206+
s, opt, path = arg.partition("-fsanitize-ignorelist=")
207+
if s == "" and not paths.is_absolute(path):
208+
res.append("{}${{pwd}}/{}".format(opt, path))
209+
else:
210+
res.append(arg)
211+
return res
212+
195213
def _pwd_flags(args):
196-
return _pwd_flags_isystem(_pwd_flags_sysroot(args))
214+
return _pwd_flags_fsanitize_ignorelist(_pwd_flags_isystem(_pwd_flags_sysroot(args)))
197215

198216
def _feature_enabled(ctx, feature_name, default = False):
199217
"""Check if a feature is enabled.

test/cargo_build_script/cc_args_and_env/BUILD.bazel

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
load(
22
"cc_args_and_env_test.bzl",
3+
"fsanitize_ignorelist_absolute_test",
4+
"fsanitize_ignorelist_relative_test",
35
"isystem_absolute_test",
46
"isystem_relative_test",
57
"sysroot_absolute_test",
@@ -13,3 +15,7 @@ sysroot_absolute_test(name = "sysroot_absolute_test")
1315
isystem_relative_test(name = "isystem_relative_test")
1416

1517
isystem_absolute_test(name = "isystem_absolute_test")
18+
19+
fsanitize_ignorelist_absolute_test(name = "fsanitize_ignorelist_absolute_test")
20+
21+
fsanitize_ignorelist_relative_test(name = "fsanitize_ignorelist_relative_test")

test/cargo_build_script/cc_args_and_env/cc_args_and_env_test.bzl

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,3 +194,25 @@ def isystem_absolute_test(name):
194194
target_under_test = "%s/cargo_build_script" % name,
195195
expected_cflags = ["-isystem /test/absolute/path"],
196196
)
197+
198+
def fsanitize_ignorelist_relative_test(name):
199+
cargo_build_script_with_extra_cc_compile_flags(
200+
name = "%s/cargo_build_script" % name,
201+
extra_cc_compile_flags = ["-fsanitize-ignorelist=test/relative/path"],
202+
)
203+
cc_args_and_env_analysis_test(
204+
name = name,
205+
target_under_test = "%s/cargo_build_script" % name,
206+
expected_cflags = ["-fsanitize-ignorelist=${pwd}/test/relative/path"],
207+
)
208+
209+
def fsanitize_ignorelist_absolute_test(name):
210+
cargo_build_script_with_extra_cc_compile_flags(
211+
name = "%s/cargo_build_script" % name,
212+
extra_cc_compile_flags = ["-fsanitize-ignorelist=/test/absolute/path"],
213+
)
214+
cc_args_and_env_analysis_test(
215+
name = name,
216+
target_under_test = "%s/cargo_build_script" % name,
217+
expected_cflags = ["-fsanitize-ignorelist=/test/absolute/path"],
218+
)

0 commit comments

Comments
 (0)