NoQ added inline comments.

================
Comment at: clang/lib/StaticAnalyzer/Checkers/SmartPtrModeling.cpp:130
+// Returns empty type if not found valid inner pointer type.
+static QualType getInnerPointerType(const CallEvent &Call, CheckerContext &C) {
+  QualType InnerType{};
----------------
vrnithinkumar wrote:
> It seems like a long shot to me.
> I am not sure is there any direct or easy way to get inner pointer type from 
> a smart pointer  
That's about right. You're doing exactly what you're asked: grab the template 
parameter of the class. The problem is indeed that complicated!


================
Comment at: clang/lib/StaticAnalyzer/Checkers/SmartPtrModeling.cpp:145
+        TemplateArgs.size() > 0 &&
+        "Smart pointer should have specialized with atleast one template 
type");
+    auto InnerValueType = TemplateArgs[0].getAsType();
----------------
That's pretty fundamental, right? If it's a specialization, it must have 
something specialized. It isn't specific to unique pointers, right?

Because unique pointers aren't special; technically anybody can define an 
arbitrary class with name `std::unique_ptr` and any properties they'd like. 
It's going to be undefined behavior according to the standard (because 
namespace `std` is explicitly reserved for the standard library) but if the 
compiler *crashes* it'll still be our fault.




================
Comment at: clang/lib/StaticAnalyzer/Checkers/SmartPtrModeling.cpp:448
+
+    if (NullState) {
+      auto NullVal = C.getSValBuilder().makeNull();
----------------
There's no need to check. You just conjured a brand new symbol out of thin air; 
you can be sure that it's completely unconstrained and both states are 
feasible. You can instead `assert()` that they're both feasible.


================
Comment at: clang/lib/StaticAnalyzer/Checkers/SmartPtrModeling.cpp:458-460
+                        OS << "Assuming smart pointer ";
+                        ThisRegion->printPretty(OS);
+                        OS << " is null";
----------------
Wait, what happens when the region can't be pretty-printed? Does it print two 
spaces between "pointer" and "is"?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D86027

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

Reply via email to