diff options
author | Thurston Dang <thurston@google.com> | 2025-05-07 15:57:01 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-05-07 15:57:01 -0700 |
commit | 6a28d8c24a07cb562ad53335ee9a5f07328b20e7 (patch) | |
tree | 1ce19e38bc9542c1808884f3610dbf44890b6b2d /clang/lib/Frontend/CompilerInvocation.cpp | |
parent | b756c82bfacb2822cd516c32ae3c406e71448c0a (diff) | |
download | llvm-6a28d8c24a07cb562ad53335ee9a5f07328b20e7.zip llvm-6a28d8c24a07cb562ad53335ee9a5f07328b20e7.tar.gz llvm-6a28d8c24a07cb562ad53335ee9a5f07328b20e7.tar.bz2 |
[sanitizer] Add plumbing for -fsanitize-annotate-debug-info and partly replace '-mllvm -array-bounds-pseudofn' (#138577)
@fmayer introduced '-mllvm -array-bounds-pseudofn'
(https://github.com/llvm/llvm-project/pull/128977/) to make it easier to
see why crashes occurred, and to estimate with a profiler the cycles
spent on these array-bounds checks. This functionality could be usefully
generalized to other checks in future work.
This patch adds the plumbing for -fsanitize-annotate-debug-info, and
connects it to the existing array-bounds-pseudo-fn functionality i.e.,
-fsanitize-annotate-debug-info=array-bounds can be used as a replacement
for '-mllvm -array-bounds-pseudofn', though we do not yet delete the
latter.
Note: we replaced '-mllvm -array-bounds-pseudofn' in
clang/test/CodeGen/bounds-checking-debuginfo.c, because adding test
cases would modify the line numbers in the test assertions, and
therefore obscure that the test output is the same between '-mllvm
-array-bounds-pseudofn' and -fsanitize-annotate-debug-info=array-bounds.
Diffstat (limited to 'clang/lib/Frontend/CompilerInvocation.cpp')
-rw-r--r-- | clang/lib/Frontend/CompilerInvocation.cpp | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp index c7d11e6..a0b8bbf 100644 --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -1838,6 +1838,10 @@ void CompilerInvocationBase::GenerateCodeGenArgs(const CodeGenOptions &Opts, for (std::string Sanitizer : Values) GenerateArg(Consumer, OPT_fsanitize_skip_hot_cutoff_EQ, Sanitizer); + for (StringRef Sanitizer : + serializeSanitizerKinds(Opts.SanitizeAnnotateDebugInfo)) + GenerateArg(Consumer, OPT_fsanitize_annotate_debug_info_EQ, Sanitizer); + if (!Opts.EmitVersionIdentMetadata) GenerateArg(Consumer, OPT_Qn); @@ -2332,6 +2336,11 @@ bool CompilerInvocation::ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, "-fsanitize-skip-hot-cutoff=", Args.getAllArgValues(OPT_fsanitize_skip_hot_cutoff_EQ), Diags); + parseSanitizerKinds( + "-fsanitize-annotate-debug-info=", + Args.getAllArgValues(OPT_fsanitize_annotate_debug_info_EQ), Diags, + Opts.SanitizeAnnotateDebugInfo); + Opts.EmitVersionIdentMetadata = Args.hasFlag(OPT_Qy, OPT_Qn, true); if (!LangOpts->CUDAIsDevice) |