aaron.ballman added inline comments.

================
Comment at: clang-tidy/cppcoreguidelines/OwningMemoryCheck.cpp:141
+  assert(CheckExecuted &&
+         "Non of the subroutines executed, logic error in matcher!");
+}
----------------
Non -> None


================
Comment at: clang-tidy/cppcoreguidelines/OwningMemoryCheck.cpp:294
+
+  // Classes, that contains owners, but do not declare destructors
+  if (BadClass) {
----------------
Missing a full stop at the end of the sentence.


================
Comment at: test/clang-tidy/cppcoreguidelines-owning-memory.cpp:39
+  return new int(42);
+  // CHECK-MESSAGES: [[@LINE-1]]:3: warning: returning a 'gsl::owner<>' from a 
function but not declaring it; return type is 'int *'
+}
----------------
JonasToth wrote:
> aaron.ballman wrote:
> > JonasToth wrote:
> > > aaron.ballman wrote:
> > > > This diagnostic confuses me -- there's no gsl::owner<> involved 
> > > > anywhere; am I missing something?
> > > `owner<>` is not involved, but the guidelines say, that `new` must be 
> > > assigned to an owner.
> > > 
> > > This is in line with the resource semantics. Everything that creates an 
> > > resource, that must be released (no RAII available) shall be annotated.
> > > 
> > > The diagnostic is bad, though.
> > > 
> > > `Returning a newly created resource from function 'functionname', without 
> > > declaring it as 'gsl::owner<>'; type is '...'`
> > Okay, that makes more sense to me. I don't think the name of the function 
> > helps all that much in the diagnostic, however. What about:
> > 
> > `"returning a newly created resource of type %0 from a function whose 
> > return type is not 'gsl::owner<>'"`
> There is a minor issue with the diagnostic in general, since it is emitted 
> for values of type `gsl::owner<>` and values that are known to be an owner 
> like `new int(42)`.
> 
> There is no easy way to distinguish between a recognized resource or an 
> annotated resource, without complicating the matchers (what i dont want, 
> since there is already a lot happening).
> 
> Mixing both cases in the diagnostic would help, but go in the direction of 
> `recognized resource`, that was decided against earlier.
> 
> Would the following modification be acceptable as well?
> `returning a newly created resource of type %0 or value of type 
> 'gsl::owner<>' from a function whose return type is not 'gsl::owner<>'`
> or
> `returning a newly created resource of type %0 or value of type 
> 'gsl::owner<>' without annotating the return type of the function as 
> 'gsl::owner<>'`.
> 
> This general problem holds true for other cases, since i want to match for 
> `IsConsideredOwner`, which wraps cases like `new`, functions returning 
> `owner<>` and variables of type `owner<>`. 
> I want to expand this further to functions that should return `owner<>` but 
> can't, like `malloc`.
> Splitting up the matchers instead of using `IsConsideredOwner` would be a 
> burden including a lot of code duplication.
> Would the following modification be acceptable as well?
> `returning a newly created resource of type %0 or value of type 
> 'gsl::owner<>' from a function whose return type is not 'gsl::owner<>'`

I would rephrase slightly to:

`returning a newly created resource of type %0 or 'gsl::owner<>' from a 
function whose return type is not 'gsl::owner<>'`


https://reviews.llvm.org/D36354



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

Reply via email to