aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Frontend/InitPreprocessor.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2010-08-03 16:48:42 +0000
committerChris Lattner <sabre@nondot.org>2010-08-03 16:48:42 +0000
commit278008f5460f54be1fcde8d83076b248a6d417b8 (patch)
tree63a298db9646f2619fc71301b01d06288ff4fc4e /clang/lib/Frontend/InitPreprocessor.cpp
parent081627ceb8598c44883dc051a653bd6d768c9338 (diff)
downloadllvm-278008f5460f54be1fcde8d83076b248a6d417b8.zip
llvm-278008f5460f54be1fcde8d83076b248a6d417b8.tar.gz
llvm-278008f5460f54be1fcde8d83076b248a6d417b8.tar.bz2
fix some undefined behavior, PR7779.
llvm-svn: 110116
Diffstat (limited to 'clang/lib/Frontend/InitPreprocessor.cpp')
-rw-r--r--clang/lib/Frontend/InitPreprocessor.cpp7
1 files changed, 4 insertions, 3 deletions
diff --git a/clang/lib/Frontend/InitPreprocessor.cpp b/clang/lib/Frontend/InitPreprocessor.cpp
index 9990fc4..e5a4169 100644
--- a/clang/lib/Frontend/InitPreprocessor.cpp
+++ b/clang/lib/Frontend/InitPreprocessor.cpp
@@ -169,9 +169,10 @@ static void DefineTypeSize(llvm::StringRef MacroName, unsigned TypeWidth,
llvm::StringRef ValSuffix, bool isSigned,
MacroBuilder& Builder) {
long long MaxVal;
- if (isSigned)
- MaxVal = (1LL << (TypeWidth - 1)) - 1;
- else
+ if (isSigned) {
+ assert(TypeWidth != 1);
+ MaxVal = ~0ULL >> (65-TypeWidth);
+ } else
MaxVal = ~0LL >> (64-TypeWidth);
Builder.defineMacro(MacroName, llvm::Twine(MaxVal) + ValSuffix);