//===- unittest/Tooling/CastExprTest.cpp ----------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "TestVisitor.h" usingnamespaceclang; namespace { struct CastExprVisitor : TestVisitor<CastExprVisitor> { … }; TEST(CastExprTest, GetSubExprAsWrittenThroughMaterializedTemporary) { … } // Verify that getSubExprAsWritten looks through a ConstantExpr in a scenario // like // // CXXFunctionalCastExpr functional cast to struct S <ConstructorConversion> // `-ConstantExpr 'S' // |-value: Struct // `-CXXConstructExpr 'S' 'void (int)' // `-IntegerLiteral 'int' 0 TEST(CastExprTest, GetSubExprAsWrittenThroughConstantExpr) { … } // Verify that getConversionFunction looks through a ConstantExpr for implicit // constructor conversions (https://github.com/llvm/llvm-project/issues/53044): // // `-ImplicitCastExpr 'X' <ConstructorConversion> // `-ConstantExpr 'X' // |-value: Struct // `-CXXConstructExpr 'X' 'void (const char *)' // `-ImplicitCastExpr 'const char *' <ArrayToPointerDecay> // `-StringLiteral 'const char [7]' lvalue "foobar" TEST(CastExprTest, GetCtorConversionFunctionThroughConstantExpr) { … } // Verify that getConversionFunction looks through a ConstantExpr for implicit // user-defined conversions. // // `-ImplicitCastExpr 'const char *' <UserDefinedConversion> // `-ConstantExpr 'const char *' // |-value: LValue // `-CXXMemberCallExpr 'const char *' // `-MemberExpr '<bound member function type>' .operator const char * // `-DeclRefExpr 'const X' lvalue Var 'x' 'const X' TEST(CastExprTest, GetUserDefinedConversionFunctionThroughConstantExpr) { … } } // namespace