diff options
author | Chris Lattner <sabre@nondot.org> | 2007-11-27 18:22:04 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2007-11-27 18:22:04 +0000 |
commit | da5a6b6d9fd52899499d5b7b46273ec844dcaa6e (patch) | |
tree | 8d4c84046716ab364cbad01b3f9a982a90e2d80d | |
parent | 4ef9be79ca5cb133f95d3446aa20d8261806dbef (diff) |
sizeof is defined by bitsin(char) not by units of 8 bits.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44369 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | AST/Expr.cpp | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/AST/Expr.cpp b/AST/Expr.cpp index 77221392f2..9bc6b903ad 100644 --- a/AST/Expr.cpp +++ b/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; |