forked from OSchip/llvm-project
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. llvm-svn: 171421
This commit is contained in:
parent
567f886eb0
commit
f86e8cced6
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue