balazske marked 2 inline comments as done.
balazske added a comment.

In D117306#3247859 <https://reviews.llvm.org/D117306#3247859>, @njames93 wrote:

> In D117306#3247417 <https://reviews.llvm.org/D117306#3247417>, 
> @LegalizeAdulthood wrote:
>
>> In D117306#3245915 <https://reviews.llvm.org/D117306#3245915>, @njames93 
>> wrote:
>>
>>> How does this check play with the `modernize-make-shared` check?
>>
>> Wouldn't it be orthogonal?
>>
>> This check looks for existing `make_shared` usages, whereas
>> modernize-make-shared adds new `make_shared` usages from
>> `new shared_ptr` usages.  I wouldn't expect `modernize-make-shared`
>> to generate mismatched scalar/array `shared_ptr` instances.
>
> This check looks for constructions of shared_ptr types from an array new 
> expression. modernize-make-shared looks for constructions of shared_ptr types 
> using the new expression, However I'm not sure how it handles the array 
> version.

I found out that `make_shared` can not handle array at all (until C++20, but I 
do not plan to handle such new features). `modernize-make-shared` should not 
transform into `make_shared` if an array is created (if it works correct) but I 
do not see test cases for this.



================
Comment at: clang-tools-extra/clang-tidy/misc/SharedPtrArrayMismatchCheck.cpp:39
+      cxxConstructExpr(
+          hasDeclaration(UsedConstructor), argumentCountIs(1),
+          hasArgument(0, cxxNewExpr(isArray(), hasType(pointerType(pointee(
----------------
LegalizeAdulthood wrote:
> What about the other constructor overloads?
> Creating a `shared_ptr` with a deleter is quite common.
The intent is to find cases where no deleter is specified. If a deleter is used 
we can not tell in reliable way if it is correct for an array. The check 
assumes that a deleter is correct and needs no check.


================
Comment at: 
clang-tools-extra/clang-tidy/misc/SharedPtrArrayMismatchCheck.cpp:104
+                                            .getLocalSourceRange();
+    D << TemplateArgumentRange;
+
----------------
LegalizeAdulthood wrote:
> I'm not sure what this is doing?
I think that this adds the additional range to the bug report. It is shown in 
the output (but I did not find a way how to check it in the test).


================
Comment at: 
clang-tools-extra/clang-tidy/misc/SharedPtrArrayMismatchCheck.cpp:106
+
+    if (isInSingleDeclStmt(VarOrField)) {
+      const SourceManager &SM = Ctx.getSourceManager();
----------------
LegalizeAdulthood wrote:
> Is this to guard against multiple variables being declared at once?
Yes, this is to check for "single variable declaration". But works only for 
variables (not fields).


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D117306

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

Reply via email to