=?utf-8?q?Donát?= Nagy <donat.n...@ericsson.com>,NagyDonat
 <donat.n...@ericsson.com>
Message-ID:
In-Reply-To: <llvm.org/llvm/llvm-project/pull/83...@github.com>


================
@@ -27,20 +27,48 @@ class IdentifierInfo;
 
 namespace clang {
 namespace ento {
-
-enum CallDescriptionFlags : unsigned {
-  CDF_None = 0,
-
-  /// Describes a C standard function that is sometimes implemented as a macro
-  /// that expands to a compiler builtin with some __builtin prefix.
-  /// The builtin may as well have a few extra arguments on top of the 
requested
-  /// number of arguments.
-  CDF_MaybeBuiltin = 1 << 0,
-};
-
-/// This class represents a description of a function call using the number of
-/// arguments and the name of the function.
+/// A `CallDescription` is a pattern that can be used to _match_ calls
+/// based on the qualified name and the argument/parameter counts.
 class CallDescription {
+public:
+  enum class Mode {
+    /// Match calls to functions from the C standard library. On some platforms
+    /// some functions may be implemented as macros that expand to calls to
+    /// built-in variants of the given functions, so in this mode we use some
+    /// heuristics to recognize these implementation-defined variants:
+    ///  - We also accept calls where the name is derived from the specified
+    ///    name by adding "__builtin" or similar prefixes/suffixes.
+    ///  - We also accept calls where the number of arguments or parameters is
+    ///    greater than the specified value.
+    /// For the exact heuristics, see CheckerContext::isCLibraryFunction().
+    /// Note that functions whose declaration context is not a TU (e.g.
+    /// methods, functions in namespaces) are not accepted as C library
+    /// functions.
+    /// FIXME: If I understand it correctly, this discards calls where C++ code
+    /// refers a C library function through the namespace `std::` via headers
+    /// like <cstdlib>.
+    CLibrary,
----------------
NagyDonat wrote:

> I saw cases at MallocChecker where it is not used, then it should be used in 
> these cases too.
In fact that was the original reason why I started to work on 
`CallDescription`s: there was an open source bug report 
(https://github.com/llvm/llvm-project/issues/81597) where MallocChecker 
recognized a C++ method named `free` as if it was the well-known function 
`free`.

Now I realize that it would've been possible to resolve that bug by just adding 
`CDF_MaybeBuiltin` to the `CallDescription` for `free`, but I was misled by the 
name `CDF_MaybeBuiltin` and thought that I need to introduce a new matching 
mode that says "_must_ be function".

After merging this commit, I'll quickly do a followup commit that fixes 
`MallocChecker`, but then I'll continue with cleaning up the other checkers as 
well.

https://github.com/llvm/llvm-project/pull/83432
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to