By default, clang assumes that all trailing array objects could be a FAM. So, an array of undefined size, size 0, size 1, or even size 42 is considered as FAMs for optimizations at least. One needs to override the default behavior by supplying the `-fstrict-flex-arrays=<N>` flag, with `N > 0` value to reduce the set of FAM candidates. Value `3` is the most restrictive and `0` is the most permissive on this scale. 0: all trailing arrays are FAMs 1: only incomplete, zero and one-element arrays are FAMs 2: only incomplete, zero-element arrays are FAMs 3: only incomplete arrays are FAMs If the user is happy with consdering single-element arrays as FAMs, they just need to remove the `consider-single-element-arrays-as-flexible-array-members` from the command line. Otherwise, if they don't want to recognize such cases as FAMs, they should specify `-fstrict-flex-arrays` anyway, which will be picked up by CSA. Any use of the deprecated analyzer-config value will trigger a warning explaining what to use instead. The `-analyzer-config-help` is updated accordingly. Depends on D138657 Reviewed By: xazax.hun Differential Revision: https://reviews.llvm.org/D138659
25 lines
1.3 KiB
C++
25 lines
1.3 KiB
C++
// RUN: %clang_analyze_cc1 -analyzer-checker=core %s 2>&1 \
|
|
// RUN: | FileCheck %s --check-prefixes=CHECK
|
|
|
|
// RUN: not %clang_analyze_cc1 -analyzer-checker=core -analyzer-store=region %s 2>&1 \
|
|
// RUN: | FileCheck %s --check-prefixes=DEPRECATED-STORE
|
|
// DEPRECATED-STORE: error: unknown argument: '-analyzer-store=region'
|
|
|
|
// RUN: not %clang_analyze_cc1 -analyzer-checker=core -analyzer-opt-analyze-nested-blocks %s 2>&1 \
|
|
// RUN: | FileCheck %s --check-prefixes=DEPRECATED-NESTED-BLOCKS
|
|
// DEPRECATED-NESTED-BLOCKS: error: unknown argument: '-analyzer-opt-analyze-nested-blocks'
|
|
|
|
// RUN: %clang_analyze_cc1 -analyzer-checker=core -analyzer-config consider-single-element-arrays-as-flexible-array-members=true %s 2>&1 \
|
|
// RUN: | FileCheck %s --check-prefixes=CHECK,DEPRECATED-SINGLE-ELEM-FAM
|
|
// DEPRECATED-SINGLE-ELEM-FAM: warning: analyzer option 'consider-single-element-arrays-as-flexible-array-members' is deprecated. This flag will be removed in clang-17, and passing this option will be an error. Use '-fstrict-flex-arrays=<N>' instead.
|
|
|
|
// RUN: %clang_analyze_cc1 -analyzer-config-help 2>&1 \
|
|
// RUN: | FileCheck %s --check-prefixes=CHECK-HELP
|
|
// CHECK-HELP: [DEPRECATED, removing in clang-17; use '-fstrict-flex-arrays=<N>'
|
|
// CHECK-HELP-NEXT: instead] (default: true)
|
|
|
|
int empty(int x) {
|
|
// CHECK: warning: Division by zero
|
|
return x ? 0 : 0 / x;
|
|
}
|