From fde3b36125c660ffbfee4200c95c281e4c464747 Mon Sep 17 00:00:00 2001 From: Mateusz Jablonski Date: Thu, 7 Nov 2024 12:10:01 +0000 Subject: [PATCH] fix: avoid enum out of scope cast in getProductsForTargetRange function Signed-off-by: Mateusz Jablonski --- .../source/ocloc_fatbinary.cpp | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/shared/offline_compiler/source/ocloc_fatbinary.cpp b/shared/offline_compiler/source/ocloc_fatbinary.cpp index 1d6b0c64ec..0ce7bdd73b 100644 --- a/shared/offline_compiler/source/ocloc_fatbinary.cpp +++ b/shared/offline_compiler/source/ocloc_fatbinary.cpp @@ -101,12 +101,12 @@ void getProductsAcronymsForTarget(std::vector } template -std::vector getProductsForTargetRange(T targetFrom, T targetTo, OclocArgHelper *argHelper) { +std::vector getProductsForTargetRange(T targetFrom, T targetTo, OclocArgHelper *argHelper, const T maxValue) { std::vector ret{}; if (targetFrom > targetTo) { std::swap(targetFrom, targetTo); } - while (targetFrom <= targetTo) { + while (targetFrom <= targetTo && targetFrom < maxValue) { getProductsAcronymsForTarget(ret, targetFrom, argHelper); targetFrom = static_cast(static_cast(targetFrom) + 1); } @@ -145,13 +145,13 @@ std::vector getProductForClosedRange(ConstStringRef rangeFrom, C auto familyFrom = argHelper->productConfigHelper->getFamilyFromDeviceName(rangeFromStr); auto familyTo = argHelper->productConfigHelper->getFamilyFromDeviceName(rangeToStr); if (familyFrom != AOT::UNKNOWN_FAMILY && familyTo != AOT::UNKNOWN_FAMILY) { - return getProductsForTargetRange(familyFrom, familyTo, argHelper); + return getProductsForTargetRange(familyFrom, familyTo, argHelper, AOT::FAMILY_MAX); } auto releaseFrom = argHelper->productConfigHelper->getReleaseFromDeviceName(rangeFromStr); auto releaseTo = argHelper->productConfigHelper->getReleaseFromDeviceName(rangeToStr); if (releaseFrom != AOT::UNKNOWN_RELEASE && releaseTo != AOT::UNKNOWN_RELEASE) { - return getProductsForTargetRange(releaseFrom, releaseTo, argHelper); + return getProductsForTargetRange(releaseFrom, releaseTo, argHelper, AOT::RELEASE_MAX); } auto prodConfigFrom = argHelper->productConfigHelper->getProductConfigFromDeviceName(rangeFromStr); @@ -178,11 +178,10 @@ std::vector getProductForOpenRange(ConstStringRef openRange, Ocl if (rangeTo) { unsigned int familyFrom = AOT::UNKNOWN_FAMILY; ++familyFrom; - return getProductsForTargetRange(static_cast(familyFrom), family, argHelper); + return getProductsForTargetRange(static_cast(familyFrom), family, argHelper, AOT::FAMILY_MAX); } else { unsigned int familyTo = AOT::FAMILY_MAX; - --familyTo; - return getProductsForTargetRange(family, static_cast(familyTo), argHelper); + return getProductsForTargetRange(family, static_cast(familyTo), argHelper, AOT::FAMILY_MAX); } } @@ -191,11 +190,10 @@ std::vector getProductForOpenRange(ConstStringRef openRange, Ocl if (rangeTo) { unsigned int releaseFrom = AOT::UNKNOWN_FAMILY; ++releaseFrom; - return getProductsForTargetRange(static_cast(releaseFrom), release, argHelper); + return getProductsForTargetRange(static_cast(releaseFrom), release, argHelper, AOT::RELEASE_MAX); } else { unsigned int releaseTo = AOT::RELEASE_MAX; - --releaseTo; - return getProductsForTargetRange(release, static_cast(releaseTo), argHelper); + return getProductsForTargetRange(release, static_cast(releaseTo), argHelper, AOT::RELEASE_MAX); } }