dberris added inline comments.

================
Comment at: include/clang/Basic/Attr.td:436
@@ +435,3 @@
+                   CXX11<"clang", "xray_never_instrument">];
+  let Subjects = SubjectList<[CXXMethod, ObjCMethod, Function], WarnDiag,
+                              "ExpectedFunctionOrMethod">;
----------------
aaron.ballman wrote:
> You can drop the WarnDiag and string literal; the defaults already do the 
> right thing.
I tried, but I'm getting this error:
.../Basic/Attr.td:436:18: error: Could not deduce diagnostic argument for Attr 
subjects
  let Subjects = SubjectList<[CXXMethod, ObjCMethod, Function]>;


================
Comment at: include/clang/Basic/AttrDocs.td:2455
@@ +2454,3 @@
+  let Content = [{
+``__attribute__((xray_always_instrument))`` or 
``[[clang:xray_always_instrument]]`` is used to mark member functions (in C++), 
methods (in Objective C), and free functions (in C, C++, and Objective C) to be 
instrumented with XRay. This will cause the function to always have space at 
the beginning and exit points to allow for runtime patching.
+
----------------
aaron.ballman wrote:
> Let's make sure that this patch and D19908 do not conflict, because they seem 
> to be implementing competing semantics.
Good catch. Let me comment on D19908 to see if it competes with how we define 
XRay instrumentation. As far as I can tell from the LLVM side, those should not 
interfere with each other.

================
Comment at: lib/CodeGen/CodeGenFunction.cpp:381
@@ -380,3 +380,3 @@
 
-  for (SmallVectorImpl<std::pair<llvm::Instruction *, llvm::Value *> 
>::iterator
+  for (SmallVectorImpl<std::pair<llvm::Instruction *, llvm::Value *>>::iterator
            I = DeferredReplacements.begin(),
----------------
aaron.ballman wrote:
> Can't you rangify this loop?
Probably in a different change. :) For now I've reverted the formatting changes.

================
Comment at: lib/CodeGen/CodeGenFunction.cpp:402
@@ +401,3 @@
+/// instrumented with XRay nop sleds.
+bool CodeGenFunction::ShouldXRayInstrumentFunction() {
+  return CGM.getCodeGenOpts().XRayInstrumentFunctions;
----------------
aaron.ballman wrote:
> Any particular reason this isn't a `const` function?
No good reason. :) Good catch, fixed.

================
Comment at: lib/CodeGen/CodeGenFunction.cpp:691
@@ +690,3 @@
+    if (D->hasAttr<XRayInstrumentAttr>()) {
+      switch (D->getAttr<XRayInstrumentAttr>()->getSpellingListIndex()) {
+        case 0:
----------------
aaron.ballman wrote:
> This is not the right way to do this. ;-)
> 
> You should check the *semantic* spelling instead. e.g.,
> ```
> if (const auto *A = D->getAttr<XRayInstrumentAttr>()) {
>   switch (A->getSemanticSpelling()) {
>   case XRayInstrumentAttr::GNU_blahblah:
>   case XRayInstrumentAttr::CXX11_clang_blahblah:
>   }
> }
> ```
> Alternatively (and I think this may be cleaner), you could add an additional 
> member in Attr.td that exposes this as two Boolean getters `bool 
> alwaysInstrument() const` and `bool neverInstrument() const` that do the 
> semantic spelling switch.
I thought this was a little weird, thanks for pointing this out!

I've used accessors instead, maybe it looks better now?


http://reviews.llvm.org/D20352



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to