diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2013-01-02 22:26:07 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2013-01-02 22:26:07 +0000 |
commit | 35abfcd3285ad82fa269b8f2468dee01a4dceb52 (patch) | |
tree | 7d74707fb1d60ef04ec70d654ac2e39a28d53b19 /lib/Basic/DiagnosticIDs.cpp | |
parent | 28c1f7524ca221fa206d547bea959049e6291093 (diff) |
DiagnosticIds: Fix offset/ID calculation, no impact outside this code.
Patch by Will Dietz:
Minor touchup so the values of Offset/ID reflect their intention.
Previously, the sum (Offset+ID) was correct, but Offset/ID
individually were wrong.
Caught by investigating unsigned overflow reported by -fsanitize=integer.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@171421 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Basic/DiagnosticIDs.cpp')
-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 |