forked from OSchip/llvm-project
39 lines
1.1 KiB
C++
39 lines
1.1 KiB
C++
//===- unittest/Tooling/CastExprTest.cpp ----------------------------------===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#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");
|
|
}
|
|
|
|
}
|