diff options
Diffstat (limited to 'clang/AST/Expr.cpp')
| -rw-r--r-- | clang/AST/Expr.cpp | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/clang/AST/Expr.cpp b/clang/AST/Expr.cpp index 77221392f23..9bc6b903adb 100644 --- a/clang/AST/Expr.cpp +++ b/clang/AST/Expr.cpp @@ -15,6 +15,7 @@ #include "clang/AST/ASTContext.h" #include "clang/AST/StmtVisitor.h" #include "clang/Basic/IdentifierTable.h" +#include "clang/Basic/TargetInfo.h" using namespace clang; //===----------------------------------------------------------------------===// @@ -587,12 +588,14 @@ bool Expr::isIntegerConstantExpr(llvm::APSInt &Result, ASTContext &Ctx, Exp->getOperatorLoc()))); // Get information about the size or align. - if (Exp->getOpcode() == UnaryOperator::SizeOf) - Result = Ctx.getTypeSize(Exp->getSubExpr()->getType(), - Exp->getOperatorLoc()) / 8; - else + if (Exp->getOpcode() == UnaryOperator::AlignOf) { Result = Ctx.getTypeAlign(Exp->getSubExpr()->getType(), Exp->getOperatorLoc()); + } else { + unsigned CharSize = Ctx.Target.getCharWidth(Exp->getOperatorLoc()); + Result = Ctx.getTypeSize(Exp->getSubExpr()->getType(), + Exp->getOperatorLoc()) / CharSize; + } break; case UnaryOperator::LNot: { bool Val = Result != 0; |

