[llvm-dev] BinaryOperator vs. CXXOperatorCallExpr in template code

Stephan Bergmann via llvm-dev llvm-dev at lists.llvm.org
Wed Jun 9 23:17:59 PDT 2021


I now see that I had accidentally sent the below to llvm-dev rather than 
cfe-dev.  (Also, see the comments at 
<https://reviews.llvm.org/D103949#2808256> "Only consider built-in 
compound assignment operators for -Wunused-but-set-*" for the place 
where this questions came up.)

On 04/06/2021 09:54, Stephan Bergmann wrote:
> Ever since 
> <https://github.com/llvm/llvm-project/commit/d2b7ef6ecea967b70bdeb8a1fd8004c5aef3e415> 
> "Improve the representation of operator expressions like "x + y" within 
> C++ templates", the documentation of BinaryOperator 
> (clang/include/clang/AST/Expr.h) and CXXOperatorCallExpr 
> (clang/include/clang/AST/ExprCXX.h) claim that if any of an operator's 
> arguments are type-dependent, it is represented with 
> CXXOperatorCallExpr.  However,
> 
>> template<typename T> void f(T x) {
>>     int n;
>>     x + n;
>>     x += n;
>> }
>> #pragma clang __debug dump f
> 
> shows both + and += to use BinaryOperator (derived 
> CompoundAssignOperator for +=).
> 
> Anything I'm missing?



More information about the llvm-dev mailing list