Author: Balázs Kéri Date: 2024-03-04T15:28:20+01:00 New Revision: bbeb946652f2830b3211dcd8c6836bce4dbdd188
URL: https://github.com/llvm/llvm-project/commit/bbeb946652f2830b3211dcd8c6836bce4dbdd188 DIFF: https://github.com/llvm/llvm-project/commit/bbeb946652f2830b3211dcd8c6836bce4dbdd188.diff LOG: [clang][analyzer] Change value of checker option in unix.StdCLibraryFunctions (second try). (#80457) Default value of checker option `ModelPOSIX` is changed to `true`. Documentation is updated. This is a re-apply of commit 7af4e8bcc354d2bd7e46ecf547172b1f19ddde3e that was reverted because a test failure (this is fixed now). Added: Modified: clang/docs/analyzer/checkers.rst clang/include/clang/StaticAnalyzer/Checkers/Checkers.td clang/test/Analysis/analyzer-config.c clang/test/Analysis/std-c-library-functions.c Removed: ################################################################################ diff --git a/clang/docs/analyzer/checkers.rst b/clang/docs/analyzer/checkers.rst index 899622ae283b17..fe211514914272 100644 --- a/clang/docs/analyzer/checkers.rst +++ b/clang/docs/analyzer/checkers.rst @@ -1320,10 +1320,23 @@ range of the argument. **Parameters** -The checker models functions (and emits diagnostics) from the C standard by -default. The ``ModelPOSIX`` option enables modeling (and emit diagnostics) of -additional functions that are defined in the POSIX standard. This option is -disabled by default. +The ``ModelPOSIX`` option controls if functions from the POSIX standard are +recognized by the checker. + +With ``ModelPOSIX=true``, many POSIX functions are modeled according to the +`POSIX standard`_. This includes ranges of parameters and possible return +values. Furthermore the behavior related to ``errno`` in the POSIX case is +often that ``errno`` is set only if a function call fails, and it becomes +undefined after a successful function call. + +With ``ModelPOSIX=false``, this checker follows the C99 language standard and +only models the functions that are described there. It is possible that the +same functions are modeled diff erently in the two cases because diff erences in +the standards. The C standard specifies less aspects of the functions, for +example exact ``errno`` behavior is often unspecified (and not modeled by the +checker). + +Default value of the option is ``true``. .. _osx-checkers: diff --git a/clang/include/clang/StaticAnalyzer/Checkers/Checkers.td b/clang/include/clang/StaticAnalyzer/Checkers/Checkers.td index e7774e5a9392d2..a224b81c33a624 100644 --- a/clang/include/clang/StaticAnalyzer/Checkers/Checkers.td +++ b/clang/include/clang/StaticAnalyzer/Checkers/Checkers.td @@ -578,7 +578,7 @@ def StdCLibraryFunctionsChecker : Checker<"StdCLibraryFunctions">, "ModelPOSIX", "If set to true, the checker models additional functions " "from the POSIX standard.", - "false", + "true", InAlpha> ]>, WeakDependencies<[CallAndMessageChecker, NonNullParamChecker]>, diff --git a/clang/test/Analysis/analyzer-config.c b/clang/test/Analysis/analyzer-config.c index 373017f4b18bfc..2167a2b32f5962 100644 --- a/clang/test/Analysis/analyzer-config.c +++ b/clang/test/Analysis/analyzer-config.c @@ -129,7 +129,7 @@ // CHECK-NEXT: unix.DynamicMemoryModeling:Optimistic = false // CHECK-NEXT: unix.Errno:AllowErrnoReadOutsideConditionExpressions = true // CHECK-NEXT: unix.StdCLibraryFunctions:DisplayLoadedSummaries = false -// CHECK-NEXT: unix.StdCLibraryFunctions:ModelPOSIX = false +// CHECK-NEXT: unix.StdCLibraryFunctions:ModelPOSIX = true // CHECK-NEXT: unroll-loops = false // CHECK-NEXT: verbose-report-filename = false // CHECK-NEXT: widen-loops = false diff --git a/clang/test/Analysis/std-c-library-functions.c b/clang/test/Analysis/std-c-library-functions.c index e6564e2bae7611..b03a1a5656517c 100644 --- a/clang/test/Analysis/std-c-library-functions.c +++ b/clang/test/Analysis/std-c-library-functions.c @@ -3,6 +3,7 @@ // RUN: -analyzer-checker=unix.StdCLibraryFunctions \ // RUN: -analyzer-checker=debug.ExprInspection \ // RUN: -analyzer-config eagerly-assume=false \ +// RUN: -analyzer-config unix.StdCLibraryFunctions:ModelPOSIX=false \ // RUN: -triple i686-unknown-linux \ // RUN: -verify @@ -11,6 +12,7 @@ // RUN: -analyzer-checker=unix.StdCLibraryFunctions \ // RUN: -analyzer-checker=debug.ExprInspection \ // RUN: -analyzer-config eagerly-assume=false \ +// RUN: -analyzer-config unix.StdCLibraryFunctions:ModelPOSIX=false \ // RUN: -triple x86_64-unknown-linux \ // RUN: -verify @@ -19,6 +21,7 @@ // RUN: -analyzer-checker=unix.StdCLibraryFunctions \ // RUN: -analyzer-checker=debug.ExprInspection \ // RUN: -analyzer-config eagerly-assume=false \ +// RUN: -analyzer-config unix.StdCLibraryFunctions:ModelPOSIX=false \ // RUN: -triple armv7-a15-linux \ // RUN: -verify @@ -27,6 +30,7 @@ // RUN: -analyzer-checker=unix.StdCLibraryFunctions \ // RUN: -analyzer-checker=debug.ExprInspection \ // RUN: -analyzer-config eagerly-assume=false \ +// RUN: -analyzer-config unix.StdCLibraryFunctions:ModelPOSIX=false \ // RUN: -triple thumbv7-a15-linux \ // RUN: -verify @@ -36,6 +40,7 @@ // RUN: -analyzer-config unix.StdCLibraryFunctions:DisplayLoadedSummaries=true \ // RUN: -analyzer-checker=debug.ExprInspection \ // RUN: -analyzer-config eagerly-assume=false \ +// RUN: -analyzer-config unix.StdCLibraryFunctions:ModelPOSIX=false \ // RUN: -triple i686-unknown-linux 2>&1 | FileCheck %s // CHECK: Loaded summary for: int isalnum(int) _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits