diff options
| author | Douglas Gregor <dgregor@apple.com> | 2009-01-23 22:22:29 +0000 |
|---|---|---|
| committer | Douglas Gregor <dgregor@apple.com> | 2009-01-23 22:22:29 +0000 |
| commit | 7a95b08fcebd553ee54183f43d84daaf3e931732 (patch) | |
| tree | ec96069bd8b635fb38b59cf6b4826d090b3f5bf2 /clang/lib | |
| parent | 486d309b34daddae8774a2035833aed0d8083002 (diff) | |
| download | bcm5719-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.cpp | 32 |
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; } |

