From 35abfcd3285ad82fa269b8f2468dee01a4dceb52 Mon Sep 17 00:00:00 2001 From: Argyrios Kyrtzidis Date: Wed, 2 Jan 2013 22:26:07 +0000 Subject: [PATCH] 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 --- lib/Basic/DiagnosticIDs.cpp | 6 ++++-- 1 file 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 -- 2.40.0