hokein added inline comments.

================
Comment at: clang/test/SemaCXX/recovery-expr-type.cpp:88
+void func() {
+  // verify that no -Wunused-variable diagnostic on the inner Derived 
expression.
+  (Derived(Derived())); // expected-error {{call to implicitly-deleted default 
constructor}}
----------------
sammccall wrote:
> sammccall wrote:
> > (nit: I think this is -Wunused but not -Wunused-variable)
> what makes you think this is firing on the *inner* expression? The diagnostic 
> location is that of the outer expression. I think the existing logic is 
> pretty close to correct (and the diagnostic is actually correct here, albeit 
> through luck), and if we want to change it, the right fix belongs somewhere 
> else.
> 
> The warning doesn't fire for just `Derived();` - isUnusedResultAWarning 
> returns false for RecoveryExpr. Nor does it fire for `(Derived());` - 
> isUnusedResultAWarning looks inside the paren expr and gets the same result 
> for the contents.
> 
> For the case in this test, we hit the CXXFunctionalCastExpr/CStyleExprCast 
> case of isUnusedResultAWarning. It says:
> 
> > If this is a cast to a constructor conversion, check the operand.
> > Otherwise, the result of the cast is unused.
> 
> But this is a bit misleading: given `Foo(2+2)` the "operand" isn't 2+2, but 
> rather a CXXConstructExpr.  And isUnusedResultAWarning returns true for this 
> case (usually).
> 
> Back to the case at hand: we diverge because the cast type is Dependent 
> instead of ConstructorConversion.
> This seems like it could be a bug - in this configuration the operand is not 
> type-dependent so why can't it resolve the overload?
> But in any case, I don't think isUnusedResultAWarning should be assuming a 
> dependent cast is safe to warn on - rather either return false or delegate to 
> the inner expr (which in this case is a RecoveryExpr).
> 
oh, my bad. I misunderstood this part of code -- I missed the critical function 
`isUnusedResultAWarning`, I saw it when reading this part of code, but I 
skipped it because the function name made me think "this is a trivial function 
that just detects whether the -Wunused flag is on".

I think you analysis is right here. Thanks!

> what makes you think this is firing on the *inner* expression? The diagnostic 
> location is that of the outer expression.

hmm, I was confused by the ~annotation of the diagnostic.

```
(Derived(Derived()));
  ^      ~~~~~~~
``` 




Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D85716

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

Reply via email to