=?utf-8?q?Donát?= Nagy <donat.n...@ericsson.com>, =?utf-8?q?Donát?= Nagy <donat.n...@ericsson.com> Message-ID: In-Reply-To: <llvm/llvm-project/pull/70...@github.com>
================ @@ -174,9 +176,119 @@ compareValueToThreshold(ProgramStateRef State, NonLoc Value, NonLoc Threshold, return {nullptr, nullptr}; } -void ArrayBoundCheckerV2::checkLocation(SVal location, bool isLoad, - const Stmt* LoadS, - CheckerContext &checkerContext) const { +static std::string getRegionName(const SubRegion *Region) { + std::string RegName = Region->getDescriptiveName(); + if (!RegName.empty()) + return RegName; + + // Field regions only have descriptive names when their parent has a + // descriptive name; so we provide a fallback representation for them: + if (const auto *FR = Region->getAs<FieldRegion>()) { + StringRef Name = FR->getDecl()->getName(); + if (!Name.empty()) + return formatv("the field '{0}'", Name); + return "the unnamed field"; + } + + if (isa<AllocaRegion>(Region)) + return "the memory returned by 'alloca'"; + + if (isa<SymbolicRegion>(Region) && + isa<HeapSpaceRegion>(Region->getMemorySpace())) + return "the heap area"; + + if (isa<StringRegion>(Region)) + return "the string literal"; + + return "the region"; +} + +static std::optional<int64_t> getConcreteValue(NonLoc SV) { + if (auto ConcreteVal = SV.getAs<nonloc::ConcreteInt>()) { + const llvm::APSInt &IntVal = ConcreteVal->getValue(); + return IntVal.tryExtValue(); + } + return std::nullopt; +} + +static const char *ShortMsgTemplates[] = { + "Out of bound access to memory preceding {0}", + "Out of bound access to memory after the end of {0}", + "Potential out of bound access to {0} with tainted offset"}; + +static std::string getShortMsg(OOB_Kind Kind, std::string RegName) { + return formatv(ShortMsgTemplates[Kind], RegName); ---------------- DonatNagyE wrote: Oh, I see, that makes sense. Anyway, I think I leave it as a `static` local (unless there are objections), because that's also fine in this use case. https://github.com/llvm/llvm-project/pull/70056 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits