Stephan Bergmann via llvm-dev
2021-Jun-04 07:54 UTC
[llvm-dev] BinaryOperator vs. CXXOperatorCallExpr in template code
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 fshows both + and += to use BinaryOperator (derived CompoundAssignOperator for +=). Anything I'm missing?
Stephan Bergmann via llvm-dev
2021-Jun-10 06:17 UTC
[llvm-dev] BinaryOperator vs. CXXOperatorCallExpr in template code
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?