Ignore FullExpr when traversing cast sub-expressions
authorAaron Ballman <aaron@aaronballman.com>
Mon, 21 Mar 2022 19:05:53 +0000 (15:05 -0400)
committerAaron Ballman <aaron@aaronballman.com>
Mon, 21 Mar 2022 19:05:53 +0000 (15:05 -0400)
commit403d7d8d7093d6637a006f8b3f75382294259d3f
tree1f122a20a52c8bb7c92faee029b8a10c2cde414a
parent276d2143148fd1519af8eef124dabc41eabb1bb0
Ignore FullExpr when traversing cast sub-expressions

Full-expressions are Sema-generated implicit nodes that cover
constant-expressions and expressions-with-cleanup for temporaries.

Ignore those as part of implicit-ignore, and also remove too-aggressive
IgnoreImplicit (which includes nested ImplicitCastExprs, for example)
on unpacked sub-expressions.

Add some unittests to demonstrate that RecursiveASTVisitor sees through
ConstantExpr nodes correctly.

Adjust cxx2a-consteval test to cover diagnostics for nested consteval
expressions that were previously missed.

Fixes bug #53044.
clang/lib/AST/Expr.cpp
clang/test/SemaCXX/cxx2a-consteval.cpp
clang/unittests/Tooling/CastExprTest.cpp