summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2009-01-23 22:22:29 +0000
committerDouglas Gregor <dgregor@apple.com>2009-01-23 22:22:29 +0000
commit7a95b08fcebd553ee54183f43d84daaf3e931732 (patch)
treeec96069bd8b635fb38b59cf6b4826d090b3f5bf2 /clang/lib
parent486d309b34daddae8774a2035833aed0d8083002 (diff)
downloadbcm5719-llvm-7a95b08fcebd553ee54183f43d84daaf3e931732.tar.gz
bcm5719-llvm-7a95b08fcebd553ee54183f43d84daaf3e931732.zip
More APSInt appeasement
llvm-svn: 62884
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/Sema/SemaInit.cpp32
1 files changed, 20 insertions, 12 deletions
diff --git a/clang/lib/Sema/SemaInit.cpp b/clang/lib/Sema/SemaInit.cpp
index 15e2d5d13f2..55d11b43985 100644
--- a/clang/lib/Sema/SemaInit.cpp
+++ b/clang/lib/Sema/SemaInit.cpp
@@ -671,18 +671,26 @@ Sema::OwningExprResult Sema::ActOnDesignatedInitializer(Designation &Desig,
if (CheckArrayDesignatorExpr(*this, StartIndex, StartValue) ||
CheckArrayDesignatorExpr(*this, EndIndex, EndValue))
Invalid = true;
- else if (EndValue < StartValue) {
- Diag(D.getEllipsisLoc(), diag::err_array_designator_empty_range)
- << StartValue.toString(10) << EndValue.toString(10)
- << StartIndex->getSourceRange() << EndIndex->getSourceRange();
- Invalid = true;
- } else {
- Designators.push_back(ASTDesignator(InitExpressions.size(),
- D.getLBracketLoc(),
- D.getEllipsisLoc(),
- D.getRBracketLoc()));
- InitExpressions.push_back(StartIndex);
- InitExpressions.push_back(EndIndex);
+ else {
+ // Make sure we're comparing values with the same bit width.
+ if (StartValue.getBitWidth() > EndValue.getBitWidth())
+ EndValue.extend(StartValue.getBitWidth());
+ else if (StartValue.getBitWidth() < EndValue.getBitWidth())
+ StartValue.extend(EndValue.getBitWidth());
+
+ if (EndValue < StartValue) {
+ Diag(D.getEllipsisLoc(), diag::err_array_designator_empty_range)
+ << StartValue.toString(10) << EndValue.toString(10)
+ << StartIndex->getSourceRange() << EndIndex->getSourceRange();
+ Invalid = true;
+ } else {
+ Designators.push_back(ASTDesignator(InitExpressions.size(),
+ D.getLBracketLoc(),
+ D.getEllipsisLoc(),
+ D.getRBracketLoc()));
+ InitExpressions.push_back(StartIndex);
+ InitExpressions.push_back(EndIndex);
+ }
}
break;
}
OpenPOWER on IntegriCloud