diff options
-rw-r--r-- | lib/Basic/DiagnosticIDs.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/lib/Basic/DiagnosticIDs.cpp b/lib/Basic/DiagnosticIDs.cpp index 4716a449a7..e1f400adaa 100644 --- a/lib/Basic/DiagnosticIDs.cpp +++ b/lib/Basic/DiagnosticIDs.cpp @@ -125,8 +125,8 @@ static const StaticDiagInfoRec *GetDiagInfo(unsigned DiagID) { #define DIAG_START_COMMON 0 // Sentinel value. #define CATEGORY(NAME, PREV) \ if (DiagID > DIAG_START_##NAME) { \ - Offset += NUM_BUILTIN_##PREV##_DIAGNOSTICS - DIAG_START_##PREV; \ - ID -= DIAG_START_##NAME - DIAG_START_##PREV + 1; \ + Offset += NUM_BUILTIN_##PREV##_DIAGNOSTICS - DIAG_START_##PREV - 1; \ + ID -= DIAG_START_##NAME - DIAG_START_##PREV; \ } CATEGORY(DRIVER, COMMON) CATEGORY(FRONTEND, DRIVER) @@ -144,6 +144,8 @@ CATEGORY(ANALYSIS, SEMA) if (ID + Offset >= StaticDiagInfoSize) return 0; + assert(ID < StaticDiagInfoSize && Offset < StaticDiagInfoSize); + const StaticDiagInfoRec *Found = &StaticDiagInfo[ID + Offset]; // If the diag id doesn't match we found a different diag, abort. This can // happen when this function is called with an ID that points into a hole in |