| 348 | static void HandleAlignmentAssumption(bool isFatal, struct CAlignmentAssumptionData *pData, unsigned long ulPointer, unsigned long ulAlignment, unsigned long ulOffset); |
| 349 | |
| 350 | static void |
| 351 | HandleOverflow(bool isFatal, struct COverflowData *pData, unsigned long ulLHS, unsigned long ulRHS, const char *szOperation) |
| 352 | { |
| 353 | char szLocation[LOCATION_MAXLEN]; |
| 354 | char szLHS[NUMBER_MAXLEN]; |
| 355 | char szRHS[NUMBER_MAXLEN]; |
| 356 | |
| 357 | ASSERT(pData); |
| 358 | |
| 359 | if (isAlreadyReported(&pData->mLocation)) |
| 360 | return; |
| 361 | |
| 362 | DeserializeLocation(szLocation, LOCATION_MAXLEN, &pData->mLocation); |
| 363 | DeserializeNumber(szLocation, szLHS, NUMBER_MAXLEN, pData->mType, ulLHS); |
| 364 | DeserializeNumber(szLocation, szRHS, NUMBER_MAXLEN, pData->mType, ulRHS); |
| 365 | |
| 366 | Report(isFatal, "UBSan: Undefined Behavior in %s, %s integer overflow: %s %s %s cannot be represented in type %s\n", |
| 367 | szLocation, ISSET(pData->mType->mTypeInfo, NUMBER_SIGNED_BIT) ? "signed" : "unsigned", szLHS, szOperation, szRHS, pData->mType->mTypeName); |
| 368 | } |
| 369 | |
| 370 | static void |
| 371 | HandleNegateOverflow(bool isFatal, struct COverflowData *pData, unsigned long ulOldValue) |
no test coverage detected