[PATCH] D45610: [XRay][clang] Make -fxray-modes= additive

Dean Michael Berris via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Apr 12 23:03:16 PDT 2018


This revision was automatically updated to reflect the committed changes.
Closed by commit rL329989: [XRay][clang] Make -fxray-modes= additive (authored by dberris, committed by ).
Herald added a subscriber: llvm-commits.

Changed prior to commit:
  https://reviews.llvm.org/D45610?vs=142333&id=142335#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D45610

Files:
  cfe/trunk/lib/Driver/XRayArgs.cpp
  cfe/trunk/test/Driver/XRay/xray-mode-flags.cpp


Index: cfe/trunk/test/Driver/XRay/xray-mode-flags.cpp
===================================================================
--- cfe/trunk/test/Driver/XRay/xray-mode-flags.cpp
+++ cfe/trunk/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: cfe/trunk/lib/Driver/XRayArgs.cpp
===================================================================
--- cfe/trunk/lib/Driver/XRayArgs.cpp
+++ cfe/trunk/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.142335.patch
Type: text/x-patch
Size: 2409 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180413/839093ee/attachment.bin>


More information about the llvm-commits mailing list