llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang-static-analyzer-1 @llvm/pr-subscribers-clang Author: Donát Nagy (NagyDonat) <details> <summary>Changes</summary> --- Full diff: https://github.com/llvm/llvm-project/pull/182036.diff 1 Files Affected: - (modified) clang/docs/analyzer/checkers.rst (+15-8) ``````````diff diff --git a/clang/docs/analyzer/checkers.rst b/clang/docs/analyzer/checkers.rst index e51015655de65..05a23791a9adb 100644 --- a/clang/docs/analyzer/checkers.rst +++ b/clang/docs/analyzer/checkers.rst @@ -874,23 +874,30 @@ numerical value. void test3() { int (*p_function)(char, char); p_function = (int (*)(char, char))0x04080; - int x = (*p_function)('x', 'y'); // NO warning yet at functon pointer calls + int x = (*p_function)('x', 'y'); // no warning yet at functon pointer calls } +Access of fixed numerical addresses can be legitimate in low-level projects +(e.g. firmware) and hardware interop. These values are often marked as +``volatile`` to prevent unwanted compiler optimizations)(, so this checker +doesn't report situations where the pointee of the fixed address is +``volatile``. + +If this suppression is not sufficient on a low-level project, then consider +disabling this ``optin`` checker.) Note that null pointers will still be +reported by :ref:`core.NullDereference <core-NullDereference>` regardless if +the pointee is ``volatile`` or not. + +.. code-block:: c + void volatile_pointee() { - *(volatile int *)0x404 = 1; // no warning: constant non-null "volatile" pointee, you must know what you are doing + *(volatile int *)0x404 = 1;// no warning: fixed non-null "volatile" pointee } void deref_volatile_nullptr() { *(volatile int *)0 = 1; // core.NullDereference still warns about this } -If your project is low-level (e.g., firmware), or deals with hardware interop with a lot of genuine constant addresses, then consider disabling this checker. -The checker automatically suppresses issues if the type of the pointee of the address is ``volatile``. -You probably already need this to be ``volatile`` for legitimate access, so the checker suppresses such issues to avoid false-positives. -Note that null pointers will still be reported by :ref:`core.NullDereference <core-NullDereference>` -regardless if the pointee is ``volatile`` or not. - If the analyzer option ``suppress-dereferences-from-any-address-space`` is set to true (the default value), then this checker never reports dereference of pointers with a specified address space. If the option is set to false, then `````````` </details> https://github.com/llvm/llvm-project/pull/182036 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
