aboutsummaryrefslogtreecommitdiff
path: root/lib/AST/Expr.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2008-07-26 21:30:36 +0000
committerChris Lattner <sabre@nondot.org>2008-07-26 21:30:36 +0000
commit28be73f74c9e241a23ea24fe5756623de6bf1084 (patch)
tree11a097ccd02202a307cafae952c1f3b22fae6847 /lib/AST/Expr.cpp
parent717250a2052ea65d95405127d4e5836a564dad18 (diff)
convert more code to use ASTContext to get canonical types instead
of doing it directly. This is required for PR2189. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@54102 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/AST/Expr.cpp')
-rw-r--r--lib/AST/Expr.cpp20
1 files changed, 10 insertions, 10 deletions
diff --git a/lib/AST/Expr.cpp b/lib/AST/Expr.cpp
index d31bde283b..60b762f66d 100644
--- a/lib/AST/Expr.cpp
+++ b/lib/AST/Expr.cpp
@@ -387,13 +387,13 @@ bool Expr::hasLocalSideEffect() const {
/// - (__real__ e) and (__imag__ e) where e is an lvalue [GNU extension]
/// - reference type [C++ [expr]]
///
-Expr::isLvalueResult Expr::isLvalue() const {
+Expr::isLvalueResult Expr::isLvalue(ASTContext &Ctx) const {
// first, check the type (C99 6.3.2.1)
if (TR->isFunctionType()) // from isObjectType()
return LV_NotObjectType;
// Allow qualified void which is an incomplete type other than void (yuck).
- if (TR->isVoidType() && !TR.getCanonicalType().getCVRQualifiers())
+ if (TR->isVoidType() && !Ctx.getCanonicalType(TR).getCVRQualifiers())
return LV_IncompleteVoidType;
if (TR->isReferenceType()) // C++ [expr]
@@ -406,7 +406,7 @@ Expr::isLvalueResult Expr::isLvalue() const {
case ArraySubscriptExprClass: // C99 6.5.3p4 (e1[e2] == (*((e1)+(e2))))
// For vectors, make sure base is an lvalue (i.e. not a function call).
if (cast<ArraySubscriptExpr>(this)->getBase()->getType()->isVectorType())
- return cast<ArraySubscriptExpr>(this)->getBase()->isLvalue();
+ return cast<ArraySubscriptExpr>(this)->getBase()->isLvalue(Ctx);
return LV_Valid;
case DeclRefExprClass: { // C99 6.5.1p2
const Decl *RefdDecl = cast<DeclRefExpr>(this)->getDecl();
@@ -416,7 +416,7 @@ Expr::isLvalueResult Expr::isLvalue() const {
}
case MemberExprClass: { // C99 6.5.2.3p4
const MemberExpr *m = cast<MemberExpr>(this);
- return m->isArrow() ? LV_Valid : m->getBase()->isLvalue();
+ return m->isArrow() ? LV_Valid : m->getBase()->isLvalue(Ctx);
}
case UnaryOperatorClass:
if (cast<UnaryOperator>(this)->getOpcode() == UnaryOperator::Deref)
@@ -425,10 +425,10 @@ Expr::isLvalueResult Expr::isLvalue() const {
if (cast<UnaryOperator>(this)->getOpcode() == UnaryOperator::Real ||
cast<UnaryOperator>(this)->getOpcode() == UnaryOperator::Imag ||
cast<UnaryOperator>(this)->getOpcode() == UnaryOperator::Extension)
- return cast<UnaryOperator>(this)->getSubExpr()->isLvalue(); // GNU.
+ return cast<UnaryOperator>(this)->getSubExpr()->isLvalue(Ctx); // GNU.
break;
case ParenExprClass: // C99 6.5.1p5
- return cast<ParenExpr>(this)->getSubExpr()->isLvalue();
+ return cast<ParenExpr>(this)->getSubExpr()->isLvalue(Ctx);
case CompoundLiteralExprClass: // C99 6.5.2.5p5
return LV_Valid;
case ExtVectorElementExprClass:
@@ -444,7 +444,7 @@ Expr::isLvalueResult Expr::isLvalue() const {
== PreDefinedExpr::CXXThis
? LV_InvalidExpression : LV_Valid);
case CXXDefaultArgExprClass:
- return cast<CXXDefaultArgExpr>(this)->getExpr()->isLvalue();
+ return cast<CXXDefaultArgExpr>(this)->getExpr()->isLvalue(Ctx);
default:
break;
}
@@ -456,8 +456,8 @@ Expr::isLvalueResult Expr::isLvalue() const {
/// if it is a structure or union, does not have any member (including,
/// recursively, any member or element of all contained aggregates or unions)
/// with a const-qualified type.
-Expr::isModifiableLvalueResult Expr::isModifiableLvalue() const {
- isLvalueResult lvalResult = isLvalue();
+Expr::isModifiableLvalueResult Expr::isModifiableLvalue(ASTContext &Ctx) const {
+ isLvalueResult lvalResult = isLvalue(Ctx);
switch (lvalResult) {
case LV_Valid: break;
@@ -473,7 +473,7 @@ Expr::isModifiableLvalueResult Expr::isModifiableLvalue() const {
if (TR->isIncompleteType())
return MLV_IncompleteType;
- if (const RecordType *r = dyn_cast<RecordType>(TR.getCanonicalType())) {
+ if (const RecordType *r = TR->getAsRecordType()) {
if (r->hasConstFields())
return MLV_ConstQualified;
}