llvm-project/clang/lib/StaticAnalyzer/Core
Balazs Benics abc873694f [analyzer] Restrict CallDescription fuzzy builtin matching
`CallDescriptions` for builtin functions relaxes the match rules
somewhat, so that the `CallDescription` will match for calls that have
some prefix or suffix. This was achieved by doing a `StringRef::contains()`.
However, this is somewhat problematic for builtins that are substrings
of each other.

Consider the following:

`CallDescription{ builtin, "memcpy"}` will match for
`__builtin_wmemcpy()` calls, which is unfortunate.

This patch addresses/works around the issue by checking if the
characters around the function's name are not part of the 'name'
semantically. In other words, to accept a match for `"memcpy"` the call
should not have alphanumeric (`[a-zA-Z]`) characters around the 'match'.

So, `CallDescription{ builtin, "memcpy"}` will not match on:

 - `__builtin_wmemcpy: there is a `w` alphanumeric character before the match.
 - `__builtin_memcpyFOoBar_inline`: there is a `F` character after the match.
 - `__builtin_memcpyX_inline`: there is an `X` character after the match.

But it will still match for:
 - `memcpy`: exact match
 - `__builtin_memcpy`: there is an _ before the match
 - `__builtin_memcpy_inline`: there is an _ after the match
 - `memcpy_inline_builtinFooBar`: there is an _ after the match

Reviewed By: NoQ

Differential Revision: https://reviews.llvm.org/D118388
2022-02-11 10:45:18 +01:00
..
APSIntType.cpp
AnalysisManager.cpp
AnalyzerOptions.cpp [analyzer] NFC: Fix wrong parameter name in printFormattedEntry. 2020-08-27 12:15:26 -07:00
BasicValueFactory.cpp [analyzer] Fix static_cast on pointer-to-member handling 2021-02-15 11:44:37 +03:00
BlockCounter.cpp
BugReporter.cpp [analyzer][NFC] Refactor llvm::isa<> usages in the StaticAnalyzer 2021-10-20 17:43:31 +02:00
BugReporterVisitors.cpp [clang] Use nullptr instead of 0 or NULL (NFC) 2021-12-29 08:34:20 -08:00
CMakeLists.txt [analyzer][NFC] Separate CallDescription from CallEvent 2021-11-15 19:10:46 +01:00
CallDescription.cpp [analyzer][NFC] MaybeUInt -> MaybeCount 2021-11-19 18:36:55 +01:00
CallEvent.cpp [analyzer][NFC] Change return value of StoreManager::attemptDownCast function from SVal to Optional<SVal> 2021-12-17 13:03:47 +02:00
Checker.cpp
CheckerContext.cpp [analyzer] Restrict CallDescription fuzzy builtin matching 2022-02-11 10:45:18 +01:00
CheckerHelpers.cpp [analyzer] Model comparision methods of std::unique_ptr 2021-07-16 09:54:05 +05:30
CheckerManager.cpp [analyzer] Dump checker name if multiple checkers evaluate the same call 2021-11-02 14:42:14 +01:00
CheckerRegistryData.cpp [clang] Fix modules build after D82585 2020-07-06 17:51:53 +02:00
CommonBugCategories.cpp [analyzer] Introduce common bug category "Unused code". 2021-03-17 20:58:27 -07:00
ConstraintManager.cpp
CoreEngine.cpp [NFC][clang]Inclusive language: remove remaining uses of sanity 2021-11-24 14:20:13 -05:00
DynamicExtent.cpp [analyzer] DynamicSize: Rename 'size' to 'extent' 2021-04-05 19:20:43 +02:00
DynamicType.cpp [analyzer] NFC: Store the pointee/referenced type for dynamic type tracking. 2020-08-27 12:15:23 -07:00
Environment.cpp [analyzer][NFC] Refactor llvm::isa<> usages in the StaticAnalyzer 2021-10-20 17:43:31 +02:00
ExplodedGraph.cpp [analyzer][NFC] Refactor llvm::isa<> usages in the StaticAnalyzer 2021-10-20 17:43:31 +02:00
ExprEngine.cpp [clang][NFC] Inclusive terms: replace some uses of sanity in clang 2021-11-19 14:58:35 -05:00
ExprEngineC.cpp [analyzer] Produce SymbolCast symbols for integral types in SValBuilder::evalCast 2022-01-18 16:08:04 +02:00
ExprEngineCXX.cpp [clang] Use isa instead of dyn_cast (NFC) 2021-11-14 09:32:40 -08:00
ExprEngineCallAndReturn.cpp [analyzer] DynamicSize: Rename 'size' to 'extent' 2021-04-05 19:20:43 +02:00
ExprEngineObjC.cpp [analyzer][NFC] Don't bind values to ObjCForCollectionStmt, replace it with a GDM trait 2020-09-11 15:58:48 +02:00
FunctionSummary.cpp
HTMLDiagnostics.cpp [clang] Use llvm::reverse (NFC) 2021-12-17 16:51:42 -08:00
LoopUnrolling.cpp [analyzer][NFC] Refactor llvm::isa<> usages in the StaticAnalyzer 2021-10-20 17:43:31 +02:00
LoopWidening.cpp [analyzer][NFC] Refactor llvm::isa<> usages in the StaticAnalyzer 2021-10-20 17:43:31 +02:00
MemRegion.cpp [NFC][analyzer] Return underlying strings directly instead of OS.str() 2021-12-09 16:05:46 -08:00
PlistDiagnostics.cpp [SystemZ][z/OS][Windows] Add new OF_TextWithCRLF flag and use this flag instead of OF_Text 2021-04-06 07:23:31 -04:00
PrettyStackTraceLocationContext.h
ProgramState.cpp [clang] Remove redundant member initialization (NFC) 2022-01-02 10:20:23 -08:00
RangeConstraintManager.cpp [analyzer] Implemented RangeSet::Factory::unite function to handle intersections and adjacency 2021-12-10 18:48:02 +02:00
RangedConstraintManager.cpp [Analyzer][solver] Handle adjustments in constraint assignor remainder 2021-10-27 17:14:34 +02:00
RegionStore.cpp Fix a typo (occured => occurred) 2022-02-08 21:35:26 +01:00
SMTConstraintManager.cpp [llvm][clang][NFC] updates inline licence info 2021-08-11 02:48:53 +00:00
SValBuilder.cpp [analyzer] Produce SymbolCast symbols for integral types in SValBuilder::evalCast 2022-01-18 16:08:04 +02:00
SVals.cpp [analyzer] Implement getType for SVal 2021-06-29 12:11:19 +03:00
SarifDiagnostics.cpp [SystemZ][z/OS][Windows] Add new OF_TextWithCRLF flag and use this flag instead of OF_Text 2021-04-06 07:23:31 -04:00
SimpleConstraintManager.cpp [analyzer] Simplify function SVal::getAsSymbolicExpression and similar ones 2020-08-03 15:03:35 +03:00
SimpleSValBuilder.cpp [clang] Use true/false instead of 1/0 (NFC) 2022-01-09 00:19:47 -08:00
Store.cpp [analyzer][NFC] Change return value of StoreManager::attemptDownCast function from SVal to Optional<SVal> 2021-12-17 13:03:47 +02:00
SymbolManager.cpp [analyzer][NFC] Refactor llvm::isa<> usages in the StaticAnalyzer 2021-10-20 17:43:31 +02:00
TextDiagnostics.cpp Fix a typo (occured => occurred) 2022-02-08 21:35:26 +01:00
WorkList.cpp