[PATCH] D45610: [XRay][clang] Make -fxray-modes= additive
Dean Michael Berris via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Apr 12 22:33:35 PDT 2018
dberris created this revision.
dberris added reviewers: eizan, kpw, pelikan.
This allows us to do the following:
clang -fxray-modes=none ... -fxray-modes=xray-basic
It's important to be able to do this in cases where we'd like to
specialise the configuration for the invocation of the compiler, in
various scripting environments.
This is related to llvm.org/PR37066, a follow-up to https://reviews.llvm.org/D45474.
https://reviews.llvm.org/D45610
Files:
clang/lib/Driver/XRayArgs.cpp
clang/test/Driver/XRay/xray-mode-flags.cpp
Index: clang/test/Driver/XRay/xray-mode-flags.cpp
===================================================================
--- clang/test/Driver/XRay/xray-mode-flags.cpp
+++ clang/test/Driver/XRay/xray-mode-flags.cpp
@@ -14,6 +14,18 @@
// RUN: 2>&1 | FileCheck --check-prefixes FDR,BASIC %s
// RUN: %clang -v -o /dev/null -fxray-instrument -fxray-modes=none -### %s \
// RUN: 2>&1 | FileCheck --check-prefixes NONE %s
+//
+// We also should support overriding the modes in an additive manner.
+//
+// RUN: %clang -v -o /dev/null -fxray-instrument -fxray-modes=none,xray-fdr \
+// RUN: -### %s \
+// RUN: 2>&1 | FileCheck --check-prefixes FDR %s
+// RUN: %clang -v -o /dev/null -fxray-instrument -fxray-modes=xray-fdr,none \
+// RUN: -### %s \
+// RUN: 2>&1 | FileCheck --check-prefixes NONE %s
+// RUN: %clang -v -o /dev/null -fxray-instrument -fxray-modes=none,all \
+// RUN: -### %s \
+// RUN: 2>&1 | FileCheck --check-prefixes FDR,BASIC %s
// BASIC: libclang_rt.xray-basic
// FDR: libclang_rt.xray-fdr
Index: clang/lib/Driver/XRayArgs.cpp
===================================================================
--- clang/lib/Driver/XRayArgs.cpp
+++ clang/lib/Driver/XRayArgs.cpp
@@ -146,21 +146,16 @@
llvm::copy(XRaySupportedModes, std::back_inserter(Modes));
else
for (const auto &Arg : SpecifiedModes) {
- if (Arg == "none") {
- Modes.clear();
- break;
- }
- if (Arg == "all") {
- Modes.clear();
- llvm::copy(XRaySupportedModes, std::back_inserter(Modes));
- break;
- }
-
// Parse CSV values for -fxray-modes=...
llvm::SmallVector<StringRef, 2> ModeParts;
llvm::SplitString(Arg, ModeParts, ",");
for (const auto &M : ModeParts)
- Modes.push_back(M);
+ if (M == "none")
+ Modes.clear();
+ else if (M == "all")
+ llvm::copy(XRaySupportedModes, std::back_inserter(Modes));
+ else
+ Modes.push_back(M);
}
// Then we want to sort and unique the modes we've collected.
@@ -205,4 +200,10 @@
ExtraDepOpt += Dep;
CmdArgs.push_back(Args.MakeArgString(ExtraDepOpt));
}
+
+ for (const auto &Mode : Modes) {
+ SmallString<64> ModeOpt("-fxray-modes=");
+ ModeOpt += Mode;
+ CmdArgs.push_back(Args.MakeArgString(ModeOpt));
+ }
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D45610.142333.patch
Type: text/x-patch
Size: 2385 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20180413/b7bb8c5c/attachment.bin>
More information about the cfe-commits
mailing list