forked from OSchip/llvm-project
38 lines
1.1 KiB
C++
38 lines
1.1 KiB
C++
//===- 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"
|
|
|
|
using namespace clang;
|
|
|
|
namespace {
|
|
|
|
struct CastExprVisitor : TestVisitor<CastExprVisitor> {
|
|
std::function<void(ExplicitCastExpr *)> OnExplicitCast;
|
|
|
|
bool VisitExplicitCastExpr(ExplicitCastExpr *Expr) {
|
|
if (OnExplicitCast)
|
|
OnExplicitCast(Expr);
|
|
return true;
|
|
}
|
|
};
|
|
|
|
TEST(CastExprTest, GetSubExprAsWrittenThroughMaterializedTemporary) {
|
|
CastExprVisitor Visitor;
|
|
Visitor.OnExplicitCast = [](ExplicitCastExpr *Expr) {
|
|
auto Sub = Expr->getSubExprAsWritten();
|
|
EXPECT_TRUE(isa<DeclRefExpr>(Sub))
|
|
<< "Expected DeclRefExpr, but saw " << Sub->getStmtClassName();
|
|
};
|
|
Visitor.runOver("struct S1 {};\n"
|
|
"struct S2 { operator S1(); };\n"
|
|
"S1 f(S2 s) { return static_cast<S1>(s); }\n");
|
|
}
|
|
|
|
}
|