aaron.ballman added a comment.

Thanks for your patience with this review! I'm currently in WG14 meetings this 
week and out on vacation next week, so my review availability is a bit limited 
at the moment (sorry for that).

I think this is heading in the right direction, but there are some lifetime 
issues we need to figure out how to resolve. I pointed out a few such places, 
but I did not do an exhaustive search to catch them all.



================
Comment at: clang/include/clang/Basic/Sarif.h:80-82
+  static SarifArtifactLocation create(StringRef URI) {
+    return SarifArtifactLocation{URI};
+  }
----------------
One thing that's worth calling out is that `StringRef` is non-owning which 
means that the argument passed to create the `SarifArtifactLocation` has to 
outlive the returned object to avoid dangling references. This makes the class 
a bit more dangerous to use because `Twine` or automatic `std::string` objects 
may cause lifetime concerns.

Should these classes be storing a `std::string` so that the memory is owned by 
SARIF?


================
Comment at: clang/include/clang/Basic/Sarif.h:116
+  static SarifArtifact create(const SarifArtifactLocation &Loc) {
+    return SarifArtifactLocation{Loc};
+  }
----------------
`Loc` is already a `SarifArtifactLocation`, did you mean `SarifArtifact` by any 
chance?

(Note, this suggests to me we should mark the ctor's here as `explicit`.)


================
Comment at: clang/include/clang/Basic/Sarif.h:229-230
+/// used to create an empty shell onto which attributes can be added using the
+/// \c setX(...) methods. The
+///
+/// For example:
----------------



================
Comment at: clang/include/clang/Basic/Sarif.h:243-245
+  // While this cannot be negative, since this type needs to be serialized
+  // to JSON, it needs to be `int64_t`. The best we can do is assert that
+  // a negative value isn't used to create it
----------------
This comment looks incorrect to me.


================
Comment at: clang/include/clang/Basic/Sarif.h:367
+
+  /// Associate the given rule with the current run
+  ///
----------------
It'd be good to explain why `createRule()` returns a value here and above.


================
Comment at: clang/include/clang/Basic/Sarif.h:378
+  /// There must be a run associated with the document, failing to do so will
+  /// cause undefined behaviour
+  /// \pre
----------------



================
Comment at: clang/include/clang/Basic/SourceLocation.h:441-456
+    bool operator()(const FullSourceLoc &lhs, const FullSourceLoc &rhs) const {
       return lhs.isBeforeInTranslationUnitThan(rhs);
     }
   };
 
   /// Prints information about this FullSourceLoc to stderr.
   ///
----------------
Looks like unrelated formatting changes; feel free to submit these as an NFC 
change if you'd like, but the changes should be reverted from this patch for 
clarity.


================
Comment at: clang/lib/Basic/Sarif.cpp:199
+    const SarifArtifactLocation &Location =
+        SarifArtifactLocation::create(FileURI).setIndex(Idx);
+    const SarifArtifact &Artifact = SarifArtifact::create(Location)
----------------
This seems like it'll be a use-after-free because the local `std::string` will 
be destroyed before the lifetime of the `SarifArtifactLocation` ends.


================
Comment at: clang/lib/Basic/Sarif.cpp:207-209
+    if (statusIter.second) {
+      I = statusIter.first;
+    }
----------------
vaibhav.y wrote:
> aaron.ballman wrote:
> > Our usual coding style elides these too. Btw, you can find the coding style 
> > document at: https://llvm.org/docs/CodingStandards.html
> Thanks, sorry there's so many of these! I definitely need to not auto-pilot 
> with style.
No worries! Our style is not... all that typical... so it can be hard to 
remember.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D109701/new/

https://reviews.llvm.org/D109701

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

Reply via email to