hazohelet added a comment.

In D152495#4481588 <https://reviews.llvm.org/D152495#4481588>, @aaron.ballman 
wrote:

> This is a bit of an odd situation -- the condition variable *is* used (e.g., 
> its value is loaded to determine whether to go into the if branch or the else 
> branch), so we should not be marking it as unused in 
> `Sema::CheckConditionVariable()`. Instead, I think we need to decide what 
> constitutes "unused" in this case. Consider:
>
>   struct RAII {
>     int &x;
>   
>     RAII(int &ref) : x(ref) {}
>     ~RAII() { x = 0; }
>   
>     operator bool() const { return true; }
>   };
>   
>   void func() {
>     int i = 12;
>     if (RAII name{i}) {
>     }
>   }
>
> I don't think `name` is unused in the same way that `i` is unused in `if (int 
> i = 1) {}`. So I think we only want this to apply to scalars and not class 
> types. I think the changes should be happening in 
> `Sema::ShouldDiagnoseUnusedDecl()`  (and you might need to thread the `Scope` 
> object through to that call -- my naive thinking is that a variable 
> declaration in a condition scope should be diagnosed as unused if it is used 
> but not referenced, but I could be off-base).

Thank you for the insightful feedback!
I agree that we should not be emitting Wunused warnings in condition 
expressions when the declaration is of class type.

About the `Scope` object, if you mean `ConditionVarScope` flag by "condition 
scope", it seems to be used only for the condition of for-statements. 
(https://github.com/llvm/llvm-project/blob/f36b0169b8821e431644cb240f081538eb2b55ef/clang/lib/Parse/ParseExprCXX.cpp#L2045-L2057)
 Also it does not push new scope but modifies the flag of the current scope.
So it does not seem to be usable for our purpose here.

Instead, I think used-but-not-referenced variable declarations can be diagnosed 
as unused regardless of whether they are declared in condition expressions. 
This saves us from deleting the assertion from CodeGen and modifying AST tests.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D152495

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

Reply via email to