зеркало из https://github.com/microsoft/clang-1.git
Add BasePath arguments to all cast expr constructors.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@102258 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
f645aaaf27
Коммит
41b2dcd465
|
@ -1729,7 +1729,9 @@ public:
|
|||
const Expr *getSubExprAsWritten() const {
|
||||
return const_cast<CastExpr *>(this)->getSubExprAsWritten();
|
||||
}
|
||||
|
||||
|
||||
const CXXBaseSpecifierArray& getBasePath() { return BasePath; }
|
||||
|
||||
static bool classof(const Stmt *T) {
|
||||
StmtClass SC = T->getStmtClass();
|
||||
if (SC >= CXXStaticCastExprClass && SC <= CXXFunctionalCastExprClass)
|
||||
|
@ -1816,9 +1818,9 @@ class ExplicitCastExpr : public CastExpr {
|
|||
|
||||
protected:
|
||||
ExplicitCastExpr(StmtClass SC, QualType exprTy, CastKind kind,
|
||||
Expr *op, TypeSourceInfo *writtenTy)
|
||||
: CastExpr(SC, exprTy, kind, op, CXXBaseSpecifierArray()),
|
||||
TInfo(writtenTy) {}
|
||||
Expr *op, CXXBaseSpecifierArray BasePath,
|
||||
TypeSourceInfo *writtenTy)
|
||||
: CastExpr(SC, exprTy, kind, op, BasePath), TInfo(writtenTy) {}
|
||||
|
||||
/// \brief Construct an empty explicit cast.
|
||||
ExplicitCastExpr(StmtClass SC, EmptyShell Shell)
|
||||
|
@ -1854,10 +1856,10 @@ class CStyleCastExpr : public ExplicitCastExpr {
|
|||
SourceLocation RPLoc; // the location of the right paren
|
||||
public:
|
||||
CStyleCastExpr(QualType exprTy, CastKind kind, Expr *op,
|
||||
TypeSourceInfo *writtenTy,
|
||||
SourceLocation l, SourceLocation r) :
|
||||
ExplicitCastExpr(CStyleCastExprClass, exprTy, kind, op, writtenTy),
|
||||
LPLoc(l), RPLoc(r) {}
|
||||
CXXBaseSpecifierArray BasePath, TypeSourceInfo *writtenTy,
|
||||
SourceLocation l, SourceLocation r)
|
||||
: ExplicitCastExpr(CStyleCastExprClass, exprTy, kind, op, BasePath,
|
||||
writtenTy), LPLoc(l), RPLoc(r) {}
|
||||
|
||||
/// \brief Construct an empty C-style explicit cast.
|
||||
explicit CStyleCastExpr(EmptyShell Shell)
|
||||
|
|
|
@ -118,8 +118,9 @@ private:
|
|||
|
||||
protected:
|
||||
CXXNamedCastExpr(StmtClass SC, QualType ty, CastKind kind, Expr *op,
|
||||
TypeSourceInfo *writtenTy, SourceLocation l)
|
||||
: ExplicitCastExpr(SC, ty, kind, op, writtenTy), Loc(l) {}
|
||||
CXXBaseSpecifierArray BasePath, TypeSourceInfo *writtenTy,
|
||||
SourceLocation l)
|
||||
: ExplicitCastExpr(SC, ty, kind, op, BasePath, writtenTy), Loc(l) {}
|
||||
|
||||
explicit CXXNamedCastExpr(StmtClass SC, EmptyShell Shell)
|
||||
: ExplicitCastExpr(SC, Shell) { }
|
||||
|
@ -155,9 +156,10 @@ public:
|
|||
/// @c static_cast<int>(1.0).
|
||||
class CXXStaticCastExpr : public CXXNamedCastExpr {
|
||||
public:
|
||||
CXXStaticCastExpr(QualType ty, CastKind kind, Expr *op,
|
||||
TypeSourceInfo *writtenTy, SourceLocation l)
|
||||
: CXXNamedCastExpr(CXXStaticCastExprClass, ty, kind, op, writtenTy, l) {}
|
||||
CXXStaticCastExpr(QualType ty, CastKind kind, Expr *op,
|
||||
CXXBaseSpecifierArray BasePath, TypeSourceInfo *writtenTy,
|
||||
SourceLocation l)
|
||||
: CXXNamedCastExpr(CXXStaticCastExprClass, ty, kind, op, BasePath, writtenTy, l) {}
|
||||
|
||||
explicit CXXStaticCastExpr(EmptyShell Empty)
|
||||
: CXXNamedCastExpr(CXXStaticCastExprClass, Empty) { }
|
||||
|
@ -176,9 +178,11 @@ public:
|
|||
/// @c dynamic_cast<Derived*>(BasePtr).
|
||||
class CXXDynamicCastExpr : public CXXNamedCastExpr {
|
||||
public:
|
||||
CXXDynamicCastExpr(QualType ty, CastKind kind, Expr *op,
|
||||
TypeSourceInfo *writtenTy, SourceLocation l)
|
||||
: CXXNamedCastExpr(CXXDynamicCastExprClass, ty, kind, op, writtenTy, l) {}
|
||||
CXXDynamicCastExpr(QualType ty, CastKind kind, Expr *op,
|
||||
CXXBaseSpecifierArray BasePath, TypeSourceInfo *writtenTy,
|
||||
SourceLocation l)
|
||||
: CXXNamedCastExpr(CXXDynamicCastExprClass, ty, kind, op, BasePath,
|
||||
writtenTy, l) {}
|
||||
|
||||
explicit CXXDynamicCastExpr(EmptyShell Empty)
|
||||
: CXXNamedCastExpr(CXXDynamicCastExprClass, Empty) { }
|
||||
|
@ -198,8 +202,9 @@ public:
|
|||
class CXXReinterpretCastExpr : public CXXNamedCastExpr {
|
||||
public:
|
||||
CXXReinterpretCastExpr(QualType ty, CastKind kind, Expr *op,
|
||||
CXXBaseSpecifierArray BasePath,
|
||||
TypeSourceInfo *writtenTy, SourceLocation l)
|
||||
: CXXNamedCastExpr(CXXReinterpretCastExprClass, ty, kind, op,
|
||||
: CXXNamedCastExpr(CXXReinterpretCastExprClass, ty, kind, op, BasePath,
|
||||
writtenTy, l) {}
|
||||
|
||||
explicit CXXReinterpretCastExpr(EmptyShell Empty)
|
||||
|
@ -220,7 +225,8 @@ class CXXConstCastExpr : public CXXNamedCastExpr {
|
|||
public:
|
||||
CXXConstCastExpr(QualType ty, Expr *op, TypeSourceInfo *writtenTy,
|
||||
SourceLocation l)
|
||||
: CXXNamedCastExpr(CXXConstCastExprClass, ty, CK_NoOp, op, writtenTy, l) {}
|
||||
: CXXNamedCastExpr(CXXConstCastExprClass, ty, CK_NoOp, op,
|
||||
CXXBaseSpecifierArray(), writtenTy, l) {}
|
||||
|
||||
explicit CXXConstCastExpr(EmptyShell Empty)
|
||||
: CXXNamedCastExpr(CXXConstCastExprClass, Empty) { }
|
||||
|
@ -724,9 +730,10 @@ class CXXFunctionalCastExpr : public ExplicitCastExpr {
|
|||
public:
|
||||
CXXFunctionalCastExpr(QualType ty, TypeSourceInfo *writtenTy,
|
||||
SourceLocation tyBeginLoc, CastKind kind,
|
||||
Expr *castExpr, SourceLocation rParenLoc)
|
||||
Expr *castExpr, CXXBaseSpecifierArray BasePath,
|
||||
SourceLocation rParenLoc)
|
||||
: ExplicitCastExpr(CXXFunctionalCastExprClass, ty, kind, castExpr,
|
||||
writtenTy),
|
||||
BasePath, writtenTy),
|
||||
TyBeginLoc(tyBeginLoc), RParenLoc(rParenLoc) {}
|
||||
|
||||
explicit CXXFunctionalCastExpr(EmptyShell Shell)
|
||||
|
|
|
@ -2886,6 +2886,7 @@ Expr *ASTNodeImporter::VisitImplicitCastExpr(ImplicitCastExpr *E) {
|
|||
return 0;
|
||||
|
||||
// FIXME: Initialize the base path.
|
||||
assert(E->getBasePath().empty() && "FIXME: Must copy base path!");
|
||||
CXXBaseSpecifierArray BasePath;
|
||||
return new (Importer.getToContext()) ImplicitCastExpr(T, E->getCastKind(),
|
||||
SubExpr, BasePath,
|
||||
|
@ -2905,8 +2906,11 @@ Expr *ASTNodeImporter::VisitCStyleCastExpr(CStyleCastExpr *E) {
|
|||
if (!TInfo && E->getTypeInfoAsWritten())
|
||||
return 0;
|
||||
|
||||
// FIXME: Initialize the base path.
|
||||
assert(E->getBasePath().empty() && "FIXME: Must copy base path!");
|
||||
CXXBaseSpecifierArray BasePath;
|
||||
return new (Importer.getToContext()) CStyleCastExpr(T, E->getCastKind(),
|
||||
SubExpr, TInfo,
|
||||
SubExpr, BasePath, TInfo,
|
||||
Importer.Import(E->getLParenLoc()),
|
||||
Importer.Import(E->getRParenLoc()));
|
||||
}
|
||||
|
|
|
@ -444,7 +444,7 @@ namespace {
|
|||
CStyleCastExpr* NoTypeInfoCStyleCastExpr(ASTContext *Ctx, QualType Ty,
|
||||
CastExpr::CastKind Kind, Expr *E) {
|
||||
TypeSourceInfo *TInfo = Ctx->getTrivialTypeSourceInfo(Ty, SourceLocation());
|
||||
return new (Ctx) CStyleCastExpr(Ty, Kind, E, TInfo,
|
||||
return new (Ctx) CStyleCastExpr(Ty, Kind, E, CXXBaseSpecifierArray(), TInfo,
|
||||
SourceLocation(), SourceLocation());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -150,26 +150,34 @@ Sema::BuildCXXNamedCast(SourceLocation OpLoc, tok::TokenKind Kind,
|
|||
|
||||
case tok::kw_dynamic_cast: {
|
||||
CastExpr::CastKind Kind = CastExpr::CK_Unknown;
|
||||
// FIXME: Initialize base path!
|
||||
CXXBaseSpecifierArray BasePath;
|
||||
if (!TypeDependent)
|
||||
CheckDynamicCast(*this, Ex, DestType, OpRange, DestRange, Kind);
|
||||
return Owned(new (Context)CXXDynamicCastExpr(DestType.getNonReferenceType(),
|
||||
Kind, Ex, DestTInfo, OpLoc));
|
||||
Kind, Ex, BasePath, DestTInfo,
|
||||
OpLoc));
|
||||
}
|
||||
case tok::kw_reinterpret_cast: {
|
||||
CastExpr::CastKind Kind = CastExpr::CK_Unknown;
|
||||
// FIXME: Initialize base path!
|
||||
CXXBaseSpecifierArray BasePath;
|
||||
if (!TypeDependent)
|
||||
CheckReinterpretCast(*this, Ex, DestType, OpRange, DestRange, Kind);
|
||||
return Owned(new (Context) CXXReinterpretCastExpr(
|
||||
DestType.getNonReferenceType(),
|
||||
Kind, Ex, DestTInfo, OpLoc));
|
||||
Kind, Ex, BasePath, DestTInfo, OpLoc));
|
||||
}
|
||||
case tok::kw_static_cast: {
|
||||
CastExpr::CastKind Kind = CastExpr::CK_Unknown;
|
||||
// FIXME: Initialize base path!
|
||||
CXXBaseSpecifierArray BasePath;
|
||||
if (!TypeDependent)
|
||||
CheckStaticCast(*this, Ex, DestType, OpRange, Kind);
|
||||
|
||||
return Owned(new (Context) CXXStaticCastExpr(DestType.getNonReferenceType(),
|
||||
Kind, Ex, DestTInfo, OpLoc));
|
||||
Kind, Ex, BasePath,
|
||||
DestTInfo, OpLoc));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -3957,13 +3957,15 @@ Sema::BuildCStyleCastExpr(SourceLocation LParenLoc, TypeSourceInfo *Ty,
|
|||
Expr *castExpr = static_cast<Expr*>(Op.get());
|
||||
|
||||
CastExpr::CastKind Kind = CastExpr::CK_Unknown;
|
||||
// FIXME: Initialize base path!
|
||||
CXXBaseSpecifierArray BasePath;
|
||||
if (CheckCastTypes(SourceRange(LParenLoc, RParenLoc), Ty->getType(), castExpr,
|
||||
Kind))
|
||||
return ExprError();
|
||||
|
||||
Op.release();
|
||||
return Owned(new (Context) CStyleCastExpr(Ty->getType().getNonReferenceType(),
|
||||
Kind, castExpr, Ty,
|
||||
Kind, castExpr, BasePath, Ty,
|
||||
LParenLoc, RParenLoc));
|
||||
}
|
||||
|
||||
|
|
|
@ -501,6 +501,8 @@ Sema::ActOnCXXTypeConstructExpr(SourceRange TypeRange, TypeTy *TypeRep,
|
|||
//
|
||||
if (NumExprs == 1) {
|
||||
CastExpr::CastKind Kind = CastExpr::CK_Unknown;
|
||||
// FIXME: Initialize base path!
|
||||
CXXBaseSpecifierArray BasePath;
|
||||
if (CheckCastTypes(TypeRange, Ty, Exprs[0], Kind, /*FunctionalStyle=*/true))
|
||||
return ExprError();
|
||||
|
||||
|
@ -508,7 +510,8 @@ Sema::ActOnCXXTypeConstructExpr(SourceRange TypeRange, TypeTy *TypeRep,
|
|||
|
||||
return Owned(new (Context) CXXFunctionalCastExpr(Ty.getNonReferenceType(),
|
||||
TInfo, TyBeginLoc, Kind,
|
||||
Exprs[0], RParenLoc));
|
||||
Exprs[0], BasePath,
|
||||
RParenLoc));
|
||||
}
|
||||
|
||||
if (const RecordType *RT = Ty->getAs<RecordType>()) {
|
||||
|
|
Загрузка…
Ссылка в новой задаче