public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug analyzer/106325] New: `analyzer-null-dereference` gets thrown on a parameter on a function marked with `__attribute__((nonnull))`
@ 2022-07-16 13:11 alex at zrythm dot org
  2022-07-16 13:14 ` [Bug analyzer/106325] " alex at zrythm dot org
                   ` (9 more replies)
  0 siblings, 10 replies; 11+ messages in thread
From: alex at zrythm dot org @ 2022-07-16 13:11 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106325

            Bug ID: 106325
           Summary: `analyzer-null-dereference` gets thrown on a parameter
                    on a function marked with `__attribute__((nonnull))`
           Product: gcc
           Version: 12.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: analyzer
          Assignee: dmalcolm at gcc dot gnu.org
          Reporter: alex at zrythm dot org
  Target Milestone: ---

Created attachment 53307
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=53307&action=edit
corresponding .i file (compressed) for the source file where analyzer produces
wrong output

When building Zrythm with the analyzer turned on I get false positives for
`analyzer-null-dereference` when compiling `src/gui/backend/arranger_object.c`

```
../src/gui/backend/arranger_object.c:1936:9: エラー: dereference of NULL ‘self’
[CWE-476] [-Werror=analyzer-null-dereference]
 1936 |     self->is_auditioner ? SAMPLE_PROCESSOR->tracklist : TRACKLIST;
```

`self` is a function parameter and the function is marked with
`__attribute__((nonnull))` in the header (`inc/gui/backend/arranger_object.h`
so as far as the analyzer is concerned this variable cannot be NULL, so the
warning/error is wrong. The value of `self` is never changed within the
function either.

Here is the relevant info from https://gcc.gnu.org/bugs/ (I also attached the
.i file):

```
FAILED: src/libzrythm-lib.so.p/gui_backend_arranger_object.c.o 
cc -Isrc/libzrythm-lib.so.p -Isrc -I../src -I. -I.. -Iinc -I../inc -Iext
-I../ext -Iext/midilib -I../ext/midilib -Iext/whereami -I../ext/whereami
-Iext/zix -I../ext/zix -Iext/weakjack -I../ext/weakjack -I../inc/plugins/lv2
-I../subprojects/libcyaml/include -Isubprojects/libaudec
-I../subprojects/libaudec -Isubprojects/libaudec/inc
-I../subprojects/libaudec/inc -I../subprojects/reproc/reproc/include
-Isubprojects/reproc/__CMake_build -I../subprojects/reproc/__CMake_build
-Isubprojects/reproc -I../subprojects/reproc -Isubprojects/libbacktrace
-I/usr/include/libadwaita-1 -I/usr/include/gtk-4.0 -I/usr/include/pango-1.0
-I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/sysprof-4
-I/usr/include/harfbuzz -I/usr/include/freetype2 -I/usr/include/libpng16
-I/usr/include/libmount -I/usr/include/blkid -I/usr/include/fribidi
-I/usr/include/cairo -I/usr/include/lzo -I/usr/include/pixman-1
-I/usr/include/gdk-pixbuf-2.0 -I/usr/include/graphene-1.0
-I/usr/lib/graphene-1.0/include -I/usr/include/gio-unix-2.0
-I/usr/include/libpanel-1 -I/usr/include/opus -I/usr/include/graphviz
-I/usr/include/guile/2.2 -I/usr/include/carla -I/usr/include/carla/includes
-I/usr/include/serd-0 -I/usr/include/sord-0 -I/usr/include/sratom-0
-I/usr/include/lilv-0 -I/usr/include/gtksourceview-5 -I/usr/include/libxml2
-I/usr/include/valgrind
-I/home/alex/Documents/git/zrythm/build/subprojects/libbacktrace/dist/home/alex/local/include
-I/usr/include/json-glib-1.0 -fdiagnostics-color=always -D_FILE_OFFSET_BITS=64
-Wall -Winvalid-pch -Wextra -std=gnu11 -O0 -g
-DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_66
-DGLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_66
-DGDK_VERSION_MIN_REQUIRED=GDK_VERSION_4_6
-DGDK_VERSION_MAX_ALLOWED=GDK_VERSION_4_6 -Wno-bad-function-cast
-Wno-old-style-declaration -Werror=absolute-value -Wformat=2
-Wno-missing-field-initializers -Wno-unused-parameter -Wno-sequence-point
-Wignored-qualifiers -Wno-cast-function-type -Walloca -fno-common
-frecord-gcc-switches -march=native -mtune=native -ffast-math -fstrength-reduce
-fdata-sections -ffunction-sections -freciprocal-math
-fsingle-precision-constant -msse -msse2 -mfpmath=sse -fno-math-errno
-fno-omit-frame-pointer -g3 '-DGETTEXT_PACKAGE="zrythm"' -fPIC -pthread
-mfpmath=sse -msse -msse2 -DREAL_BUILD -D_REENTRANT -mfpmath=sse -msse -msse2
-mfpmath=sse -msse -msse2 -mfpmath=sse -msse -msse2 -Wformat=2
-Wno-missing-field-initializers -Wno-unused-parameter -Wno-sequence-point
-Wignored-qualifiers -Wno-cast-function-type -Walloca -fno-common
'-DLV2_UI__Gtk4UI="https://lv2plug.in/ns/extensions/ui#Gtk4UI"'
-DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED '-D__(x)=x'
-DG_LOG_USE_STRUCTURED=1 '-DG_LOG_DOMAIN="zrythm"' -DREALTIME=
'-DDEPRECATED_MSG(x)=__attribute__((deprecated(x)))'
'-DOPTIMIZE(x)=__attribute__((optimize(#x)))' '-DOPTIMIZE_O0=OPTIMIZE(00)'
'-DOPTIMIZE_O1=OPTIMIZE(01)' '-DOPTIMIZE_O2=OPTIMIZE(02)'
'-DOPTIMIZE_O3=OPTIMIZE(03)'
'-DNONNULL_ARGS(...)=__attribute__((nonnull(__VA_ARGS__)))'
'-DACCESS(...)=__attribute__((access(__VA_ARGS__)))'
'-DACCESS_READ_ONLY(...)=ACCESS(read_only,__VA_ARGS__)' -frecord-gcc-switches
'-DALWAYS_INLINE=__attribute__((always_inline))' '-DCOLD=__attribute__((cold))'
'-DHOT=__attribute__((hot))' '-DPURE=__attribute__((pure))'
'-DNONNULL=__attribute__((nonnull))'
'-DRETURNS_NONNULL=__attribute__((returns_nonnull))'
'-DSTACK_PROTECT=__attribute__((stack_protect))'
'-DNO_STACK_PROTECTOR=__attribute__((no_stack_protector))'
'-DWARN_UNUSED_RESULT=__attribute__((warn_unused_result))'
'-DCONST=__attribute__((const))' '-DMALLOC=__attribute__((malloc))'
-march=native -mtune=native -ffast-math -fstrength-reduce -DPIC -fdata-sections
-ffunction-sections -freciprocal-math -fsingle-precision-constant -msse -msse2
-mfpmath=sse -fno-math-errno -fno-omit-frame-pointer -g3 -Werror=format=2
-Werror=format-overflow -Werror=format-truncation -Werror=clobbered
-Werror=disabled-optimization -Werror=float-equal -Werror=logical-op
-Werror=pointer-arith -Werror=enum-conversion -Werror=overlength-strings
-Werror=stringop-truncation -Werror=missing-declarations
-Werror=int-to-pointer-cast -Werror=shadow -Werror=undef -Werror=unused
-fstrict-aliasing -Wstrict-aliasing=2 -Werror=strict-aliasing
-Wstrict-overflow=2 -fstrict-overflow -Werror=duplicated-branches
-Werror=duplicated-cond -Werror=null-dereference -Werror=init-self
-Werror=jump-misses-init -Werror=missing-prototypes -Werror=nested-externs
-Werror=write-strings -Werror=sign-compare -Werror=discarded-qualifiers
-Werror=float-conversion -Werror=implicit-function-declaration
-Werror=uninitialized -Werror=maybe-uninitialized -Werror=return-type
-Werror=int-conversion -Werror=incompatible-pointer-types -Werror=implicit-int
-Werror=multistatement-macros -Werror=switch -Werror=overflow
-Werror=array-bounds -Werror=enum-compare -Werror=misleading-indentation
-Werror=int-in-bool-context -Werror=type-limits -Werror=deprecated-declarations
-Werror=endif-labels -Werror=logical-not-parentheses -Werror=parentheses
-Werror=comment -Werror=sizeof-pointer-div -Werror=shift-count-overflow
-Werror=free-nonheap-object -fanalyzer
-Werror=analyzer-possible-null-dereference -Werror=analyzer-malloc-leak
-Werror=analyzer-null-dereference -Werror=analyzer-null-argument -v -save-temps
-Werror=analyzer-use-after-free -Werror=analyzer-possible-null-argument
-Werror=analyzer-double-free -Werror=analyzer-file-leak -Werror=nonnull
-Werror=nonnull-compare -Werror=override-init -Werror=bool-compare
-Werror=tautological-compare -Werror=unused-result -Werror=inline
-Werror=duplicate-decl-specifier -Werror=redundant-decls
-Werror=strict-prototypes -Werror=sizeof-array-argument
-Werror=lto-type-mismatch -Werror=odr -Wsuggest-attribute=pure
-Wsuggest-attribute=const -Wsuggest-attribute=noreturn
-Wsuggest-attribute=format -Wsuggest-attribute=malloc -Wsuggest-attribute=cold
-Werror=sign-conversion -Werror=implicit-fallthrough -MD -MQ
src/libzrythm-lib.so.p/gui_backend_arranger_object.c.o -MF
src/libzrythm-lib.so.p/gui_backend_arranger_object.c.o.d -o
src/libzrythm-lib.so.p/gui_backend_arranger_object.c.o -c
../src/gui/backend/arranger_object.c
組み込み spec を使用しています。
COLLECT_GCC=cc
ターゲット: x86_64-pc-linux-gnu
configure 設定: /build/gcc/src/gcc/configure
--enable-languages=c,c++,ada,fortran,go,lto,objc,obj-c++ --enable-bootstrap
--prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man
--infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/
--with-linker-hash-style=gnu --with-system-zlib --enable-__cxa_atexit
--enable-cet=auto --enable-checking=release --enable-clocale=gnu
--enable-default-pie --enable-default-ssp --enable-gnu-indirect-function
--enable-gnu-unique-object --enable-linker-build-id --enable-lto
--enable-multilib --enable-plugin --enable-shared --enable-threads=posix
--disable-libssp --disable-libstdcxx-pch --disable-werror
--with-build-config=bootstrap-lto --enable-link-serialization=1
スレッドモデル: posix
サポートされている LTO 圧縮アルゴリズム: zlib zstd
gcc バージョン 12.1.0 (GCC) 
COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-I' 'src/libzrythm-lib.so.p'
'-I' 'src' '-I' '../src' '-I' '.' '-I' '..' '-I' 'inc' '-I' '../inc' '-I' 'ext'
'-I' '../ext' '-I' 'ext/midilib' '-I' '../ext/midilib' '-I' 'ext/whereami' '-I'
'../ext/whereami' '-I' 'ext/zix' '-I' '../ext/zix' '-I' 'ext/weakjack' '-I'
'../ext/weakjack' '-I' '../inc/plugins/lv2' '-I'
'../subprojects/libcyaml/include' '-I' 'subprojects/libaudec' '-I'
'../subprojects/libaudec' '-I' 'subprojects/libaudec/inc' '-I'
'../subprojects/libaudec/inc' '-I' '../subprojects/reproc/reproc/include' '-I'
'subprojects/reproc/__CMake_build' '-I' '../subprojects/reproc/__CMake_build'
'-I' 'subprojects/reproc' '-I' '../subprojects/reproc' '-I'
'subprojects/libbacktrace' '-I' '/usr/include/libadwaita-1' '-I'
'/usr/include/gtk-4.0' '-I' '/usr/include/pango-1.0' '-I'
'/usr/include/glib-2.0' '-I' '/usr/lib/glib-2.0/include' '-I'
'/usr/include/sysprof-4' '-I' '/usr/include/harfbuzz' '-I'
'/usr/include/freetype2' '-I' '/usr/include/libpng16' '-I'
'/usr/include/libmount' '-I' '/usr/include/blkid' '-I' '/usr/include/fribidi'
'-I' '/usr/include/cairo' '-I' '/usr/include/lzo' '-I' '/usr/include/pixman-1'
'-I' '/usr/include/gdk-pixbuf-2.0' '-I' '/usr/include/graphene-1.0' '-I'
'/usr/lib/graphene-1.0/include' '-I' '/usr/include/gio-unix-2.0' '-I'
'/usr/include/libpanel-1' '-I' '/usr/include/opus' '-I' '/usr/include/graphviz'
'-I' '/usr/include/guile/2.2' '-I' '/usr/include/carla' '-I'
'/usr/include/carla/includes' '-I' '/usr/include/serd-0' '-I'
'/usr/include/sord-0' '-I' '/usr/include/sratom-0' '-I' '/usr/include/lilv-0'
'-I' '/usr/include/gtksourceview-5' '-I' '/usr/include/libxml2' '-I'
'/usr/include/valgrind' '-I'
'/home/alex/Documents/git/zrythm/build/subprojects/libbacktrace/dist/home/alex/local/include'
'-I' '/usr/include/json-glib-1.0' '-D' '_FILE_OFFSET_BITS=64' '-Wall'
'-Winvalid-pch' '-Wextra' '-std=gnu11' '-O0' '-g' '-D'
'GLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_66' '-D'
'GLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_66' '-D'
'GDK_VERSION_MIN_REQUIRED=GDK_VERSION_4_6' '-D'
'GDK_VERSION_MAX_ALLOWED=GDK_VERSION_4_6' '-Wno-bad-function-cast'
'-Wno-old-style-declaration' '-Werror=absolute-value' '-Wformat=2'
'-mfpmath=sse' '-g3' '-D' 'GETTEXT_PACKAGE="zrythm"' '-fPIC' '-pthread'
'-mfpmath=sse' '-D' 'REAL_BUILD' '-D' '_REENTRANT' '-mfpmath=sse'
'-mfpmath=sse' '-mfpmath=sse' '-Wformat=2' '-Wno-missing-field-initializers'
'-Wno-unused-parameter' '-Wno-sequence-point' '-Wignored-qualifiers'
'-Wno-cast-function-type' '-Walloca' '-fno-common' '-D'
'LV2_UI__Gtk4UI="https://lv2plug.in/ns/extensions/ui#Gtk4UI"' '-D'
'GDK_DISABLE_DEPRECATED' '-D' 'GTK_DISABLE_DEPRECATED' '-D' '__(x)=x' '-D'
'G_LOG_USE_STRUCTURED=1' '-D' 'G_LOG_DOMAIN="zrythm"' '-D' 'REALTIME=' '-D'
'DEPRECATED_MSG(x)=__attribute__((deprecated(x)))' '-D'
'OPTIMIZE(x)=__attribute__((optimize(#x)))' '-D' 'OPTIMIZE_O0=OPTIMIZE(00)'
'-D' 'OPTIMIZE_O1=OPTIMIZE(01)' '-D' 'OPTIMIZE_O2=OPTIMIZE(02)' '-D'
'OPTIMIZE_O3=OPTIMIZE(03)' '-D'
'NONNULL_ARGS(...)=__attribute__((nonnull(__VA_ARGS__)))' '-D'
'ACCESS(...)=__attribute__((access(__VA_ARGS__)))' '-D'
'ACCESS_READ_ONLY(...)=ACCESS(read_only,__VA_ARGS__)' '-frecord-gcc-switches'
'-D' 'ALWAYS_INLINE=__attribute__((always_inline))' '-D'
'COLD=__attribute__((cold))' '-D' 'HOT=__attribute__((hot))' '-D'
'PURE=__attribute__((pure))' '-D' 'NONNULL=__attribute__((nonnull))' '-D'
'RETURNS_NONNULL=__attribute__((returns_nonnull))' '-D'
'STACK_PROTECT=__attribute__((stack_protect))' '-D'
'NO_STACK_PROTECTOR=__attribute__((no_stack_protector))' '-D'
'WARN_UNUSED_RESULT=__attribute__((warn_unused_result))' '-D'
'CONST=__attribute__((const))' '-D' 'MALLOC=__attribute__((malloc))'
'-march=native' '-mtune=native' '-ffast-math' '-D' 'PIC' '-fdata-sections'
'-ffunction-sections' '-freciprocal-math' '-fsingle-precision-constant' '-msse'
'-msse2' '-mfpmath=sse' '-fno-math-errno' '-fno-omit-frame-pointer' '-g3'
'-Werror=format=2' '-Werror=format-overflow' '-Werror=format-truncation'
'-Werror=clobbered' '-Werror=disabled-optimization' '-Werror=float-equal'
'-Werror=logical-op' '-Werror=pointer-arith' '-Werror=enum-conversion'
'-Werror=overlength-strings' '-Werror=stringop-truncation'
'-Werror=missing-declarations' '-Werror=int-to-pointer-cast' '-Werror=shadow'
'-Werror=undef' '-Werror=unused' '-fstrict-aliasing' '-Wstrict-aliasing=2'
'-Werror=strict-aliasing' '-Wstrict-overflow=2' '-fstrict-overflow'
'-Werror=duplicated-branches' '-Werror=duplicated-cond'
'-Werror=null-dereference' '-Werror=init-self' '-Werror=jump-misses-init'
'-Werror=missing-prototypes' '-Werror=nested-externs' '-Werror=write-strings'
'-Werror=sign-compare' '-Werror=discarded-qualifiers'
'-Werror=float-conversion' '-Werror=implicit-function-declaration'
'-Werror=uninitialized' '-Werror=maybe-uninitialized' '-Werror=return-type'
'-Werror=int-conversion' '-Werror=incompatible-pointer-types'
'-Werror=implicit-int' '-Werror=multistatement-macros' '-Werror=switch'
'-Werror=overflow' '-Werror=array-bounds' '-Werror=enum-compare'
'-Werror=misleading-indentation' '-Werror=int-in-bool-context'
'-Werror=type-limits' '-Werror=deprecated-declarations' '-Werror=endif-labels'
'-Werror=logical-not-parentheses' '-Werror=parentheses' '-Werror=comment'
'-Werror=sizeof-pointer-div' '-Werror=shift-count-overflow'
'-Werror=free-nonheap-object' '-fanalyzer'
'-Werror=analyzer-possible-null-dereference' '-Werror=analyzer-malloc-leak'
'-Werror=analyzer-null-dereference' '-Werror=analyzer-null-argument' '-v'
'-save-temps' '-Werror=analyzer-use-after-free'
'-Werror=analyzer-possible-null-argument' '-Werror=analyzer-double-free'
'-Werror=analyzer-file-leak' '-Werror=nonnull' '-Werror=nonnull-compare'
'-Werror=override-init' '-Werror=bool-compare' '-Werror=tautological-compare'
'-Werror=unused-result' '-Werror=inline' '-Werror=duplicate-decl-specifier'
'-Werror=redundant-decls' '-Werror=strict-prototypes'
'-Werror=sizeof-array-argument' '-Werror=lto-type-mismatch' '-Werror=odr'
'-Wsuggest-attribute=pure' '-Wsuggest-attribute=const'
'-Wsuggest-attribute=noreturn' '-Wsuggest-attribute=format'
'-Wsuggest-attribute=malloc' '-Wsuggest-attribute=cold'
'-Werror=sign-conversion' '-Werror=implicit-fallthrough' '-MD' '-MQ'
'src/libzrythm-lib.so.p/gui_backend_arranger_object.c.o' '-MF'
'src/libzrythm-lib.so.p/gui_backend_arranger_object.c.o.d' '-o'
'src/libzrythm-lib.so.p/gui_backend_arranger_object.c.o' '-c' '-dumpdir'
'src/libzrythm-lib.so.p/'
 /usr/lib/gcc/x86_64-pc-linux-gnu/12.1.0/cc1 -E -quiet -v -I
src/libzrythm-lib.so.p -I src -I ../src -I . -I .. -I inc -I ../inc -I ext -I
../ext -I ext/midilib -I ../ext/midilib -I ext/whereami -I ../ext/whereami -I
ext/zix -I ../ext/zix -I ext/weakjack -I ../ext/weakjack -I ../inc/plugins/lv2
-I ../subprojects/libcyaml/include -I subprojects/libaudec -I
../subprojects/libaudec -I subprojects/libaudec/inc -I
../subprojects/libaudec/inc -I ../subprojects/reproc/reproc/include -I
subprojects/reproc/__CMake_build -I ../subprojects/reproc/__CMake_build -I
subprojects/reproc -I ../subprojects/reproc -I subprojects/libbacktrace -I
/usr/include/libadwaita-1 -I /usr/include/gtk-4.0 -I /usr/include/pango-1.0 -I
/usr/include/glib-2.0 -I /usr/lib/glib-2.0/include -I /usr/include/sysprof-4 -I
/usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I
/usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I
/usr/include/cairo -I /usr/include/lzo -I /usr/include/pixman-1 -I
/usr/include/gdk-pixbuf-2.0 -I /usr/include/graphene-1.0 -I
/usr/lib/graphene-1.0/include -I /usr/include/gio-unix-2.0 -I
/usr/include/libpanel-1 -I /usr/include/opus -I /usr/include/graphviz -I
/usr/include/guile/2.2 -I /usr/include/carla -I /usr/include/carla/includes -I
/usr/include/serd-0 -I /usr/include/sord-0 -I /usr/include/sratom-0 -I
/usr/include/lilv-0 -I /usr/include/gtksourceview-5 -I /usr/include/libxml2 -I
/usr/include/valgrind -I
/home/alex/Documents/git/zrythm/build/subprojects/libbacktrace/dist/home/alex/local/include
-I /usr/include/json-glib-1.0 -MD
src/libzrythm-lib.so.p/gui_backend_arranger_object.c.d -MF
src/libzrythm-lib.so.p/gui_backend_arranger_object.c.o.d -MQ
src/libzrythm-lib.so.p/gui_backend_arranger_object.c.o -dD -D_REENTRANT -D
_FILE_OFFSET_BITS=64 -D GLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_66 -D
GLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_66 -D
GDK_VERSION_MIN_REQUIRED=GDK_VERSION_4_6 -D
GDK_VERSION_MAX_ALLOWED=GDK_VERSION_4_6 -D GETTEXT_PACKAGE="zrythm" -D
REAL_BUILD -D _REENTRANT -D
LV2_UI__Gtk4UI="https://lv2plug.in/ns/extensions/ui#Gtk4UI" -D
GDK_DISABLE_DEPRECATED -D GTK_DISABLE_DEPRECATED -D __(x)=x -D
G_LOG_USE_STRUCTURED=1 -D G_LOG_DOMAIN="zrythm" -D REALTIME= -D
DEPRECATED_MSG(x)=__attribute__((deprecated(x))) -D
OPTIMIZE(x)=__attribute__((optimize(#x))) -D OPTIMIZE_O0=OPTIMIZE(00) -D
OPTIMIZE_O1=OPTIMIZE(01) -D OPTIMIZE_O2=OPTIMIZE(02) -D
OPTIMIZE_O3=OPTIMIZE(03) -D
NONNULL_ARGS(...)=__attribute__((nonnull(__VA_ARGS__))) -D
ACCESS(...)=__attribute__((access(__VA_ARGS__))) -D
ACCESS_READ_ONLY(...)=ACCESS(read_only,__VA_ARGS__) -D
ALWAYS_INLINE=__attribute__((always_inline)) -D COLD=__attribute__((cold)) -D
HOT=__attribute__((hot)) -D PURE=__attribute__((pure)) -D
NONNULL=__attribute__((nonnull)) -D
RETURNS_NONNULL=__attribute__((returns_nonnull)) -D
STACK_PROTECT=__attribute__((stack_protect)) -D
NO_STACK_PROTECTOR=__attribute__((no_stack_protector)) -D
WARN_UNUSED_RESULT=__attribute__((warn_unused_result)) -D
CONST=__attribute__((const)) -D MALLOC=__attribute__((malloc)) -D PIC
../src/gui/backend/arranger_object.c -march=znver3 -mmmx -mpopcnt -msse -msse2
-msse3 -mssse3 -msse4.1 -msse4.2 -mavx -mavx2 -msse4a -mno-fma4 -mno-xop -mfma
-mno-avx512f -mbmi -mbmi2 -maes -mpclmul -mno-avx512vl -mno-avx512bw
-mno-avx512dq -mno-avx512cd -mno-avx512er -mno-avx512pf -mno-avx512vbmi
-mno-avx512ifma -mno-avx5124vnniw -mno-avx5124fmaps -mno-avx512vpopcntdq
-mno-avx512vbmi2 -mno-gfni -mvpclmulqdq -mno-avx512vnni -mno-avx512bitalg
-mno-avx512bf16 -mno-avx512vp2intersect -mno-3dnow -madx -mabm -mno-cldemote
-mclflushopt -mclwb -mclzero -mcx16 -mno-enqcmd -mf16c -mfsgsbase -mfxsr
-mno-hle -msahf -mno-lwp -mlzcnt -mmovbe -mno-movdir64b -mno-movdiri -mmwaitx
-mno-pconfig -mpku -mno-prefetchwt1 -mprfchw -mno-ptwrite -mrdpid -mrdrnd
-mrdseed -mno-rtm -mno-serialize -mno-sgx -msha -mshstk -mno-tbm -mno-tsxldtrk
-mvaes -mno-waitpkg -mwbnoinvd -mxsave -mxsavec -mxsaveopt -mxsaves
-mno-amx-tile -mno-amx-int8 -mno-amx-bf16 -mno-uintr -mno-hreset -mno-kl
-mno-widekl -mno-avxvnni -mno-avx512fp16 --param l1-cache-size=32 --param
l1-cache-line-size=64 --param l2-cache-size=512 -mtune=znver3 -mfpmath=sse
-mfpmath=sse -mfpmath=sse -mfpmath=sse -mfpmath=sse -msse -msse2 -mfpmath=sse
-std=gnu11 -Wall -Winvalid-pch -Wextra -Wno-bad-function-cast
-Wno-old-style-declaration -Werror=absolute-value -Wformat=2 -Wformat=2
-Wno-missing-field-initializers -Wno-unused-parameter -Wno-sequence-point
-Wignored-qualifiers -Wno-cast-function-type -Walloca -Werror=format=2
-Werror=format-overflow -Werror=format-truncation -Werror=clobbered
-Werror=disabled-optimization -Werror=float-equal -Werror=logical-op
-Werror=pointer-arith -Werror=enum-conversion -Werror=overlength-strings
-Werror=stringop-truncation -Werror=missing-declarations
-Werror=int-to-pointer-cast -Werror=shadow -Werror=undef -Werror=unused
-Wstrict-aliasing=2 -Werror=strict-aliasing -Wstrict-overflow=2
-Werror=duplicated-branches -Werror=duplicated-cond -Werror=null-dereference
-Werror=init-self -Werror=jump-misses-init -Werror=missing-prototypes
-Werror=nested-externs -Werror=write-strings -Werror=sign-compare
-Werror=discarded-qualifiers -Werror=float-conversion
-Werror=implicit-function-declaration -Werror=uninitialized
-Werror=maybe-uninitialized -Werror=return-type -Werror=int-conversion
-Werror=incompatible-pointer-types -Werror=implicit-int
-Werror=multistatement-macros -Werror=switch -Werror=overflow
-Werror=array-bounds -Werror=enum-compare -Werror=misleading-indentation
-Werror=int-in-bool-context -Werror=type-limits -Werror=deprecated-declarations
-Werror=endif-labels -Werror=logical-not-parentheses -Werror=parentheses
-Werror=comment -Werror=sizeof-pointer-div -Werror=shift-count-overflow
-Werror=free-nonheap-object -Werror=analyzer-possible-null-dereference
-Werror=analyzer-malloc-leak -Werror=analyzer-null-dereference
-Werror=analyzer-null-argument -Werror=analyzer-use-after-free
-Werror=analyzer-possible-null-argument -Werror=analyzer-double-free
-Werror=analyzer-file-leak -Werror=nonnull -Werror=nonnull-compare
-Werror=override-init -Werror=bool-compare -Werror=tautological-compare
-Werror=unused-result -Werror=inline -Werror=duplicate-decl-specifier
-Werror=redundant-decls -Werror=strict-prototypes -Werror=sizeof-array-argument
-Werror=lto-type-mismatch -Werror=odr -Wsuggest-attribute=pure
-Wsuggest-attribute=const -Wsuggest-attribute=noreturn
-Wsuggest-attribute=format -Wsuggest-attribute=malloc -Wsuggest-attribute=cold
-Werror=sign-conversion -Werror=implicit-fallthrough -fdiagnostics-color=always
-fPIC -fno-common -frecord-gcc-switches -ffast-math -fdata-sections
-ffunction-sections -freciprocal-math -fsingle-precision-constant
-fno-math-errno -fno-omit-frame-pointer -fstrict-aliasing -fstrict-overflow
-fanalyzer -g -g3 -g3 -fworking-directory -O0 -fpch-preprocess -o
src/libzrythm-lib.so.p/gui_backend_arranger_object.c.i
存在しないディレクトリ
"/usr/lib/gcc/x86_64-pc-linux-gnu/12.1.0/../../../../x86_64-pc-linux-gnu/include"
を無視します
存在しないディレクトリ "../subprojects/reproc/__CMake_build" を無視します
#include "..." の探索はここから始まります:
#include <...> の探索はここから始まります:
 src/libzrythm-lib.so.p
 src
 ../src
 .
 ..
 inc
 ../inc
 ext
 ../ext
 ext/midilib
 ../ext/midilib
 ext/whereami
 ../ext/whereami
 ext/zix
 ../ext/zix
 ext/weakjack
 ../ext/weakjack
 ../inc/plugins/lv2
 ../subprojects/libcyaml/include
 subprojects/libaudec
 ../subprojects/libaudec
 subprojects/libaudec/inc
 ../subprojects/libaudec/inc
 ../subprojects/reproc/reproc/include
 subprojects/reproc/__CMake_build
 subprojects/reproc
 ../subprojects/reproc
 subprojects/libbacktrace
 /usr/include/libadwaita-1
 /usr/include/gtk-4.0
 /usr/include/pango-1.0
 /usr/include/glib-2.0
 /usr/lib/glib-2.0/include
 /usr/include/sysprof-4
 /usr/include/harfbuzz
 /usr/include/freetype2
 /usr/include/libpng16
 /usr/include/libmount
 /usr/include/blkid
 /usr/include/fribidi
 /usr/include/cairo
 /usr/include/lzo
 /usr/include/pixman-1
 /usr/include/gdk-pixbuf-2.0
 /usr/include/graphene-1.0
 /usr/lib/graphene-1.0/include
 /usr/include/gio-unix-2.0
 /usr/include/libpanel-1
 /usr/include/opus
 /usr/include/graphviz
 /usr/include/guile/2.2
 /usr/include/carla
 /usr/include/carla/includes
 /usr/include/serd-0
 /usr/include/sord-0
 /usr/include/sratom-0
 /usr/include/lilv-0
 /usr/include/gtksourceview-5
 /usr/include/libxml2
 /usr/include/valgrind

/home/alex/Documents/git/zrythm/build/subprojects/libbacktrace/dist/home/alex/local/include
 /usr/include/json-glib-1.0
 /usr/lib/gcc/x86_64-pc-linux-gnu/12.1.0/include
 /usr/local/include
 /usr/lib/gcc/x86_64-pc-linux-gnu/12.1.0/include-fixed
 /usr/include
探索リストの終わりです。
COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-I' 'src/libzrythm-lib.so.p'
'-I' 'src' '-I' '../src' '-I' '.' '-I' '..' '-I' 'inc' '-I' '../inc' '-I' 'ext'
'-I' '../ext' '-I' 'ext/midilib' '-I' '../ext/midilib' '-I' 'ext/whereami' '-I'
'../ext/whereami' '-I' 'ext/zix' '-I' '../ext/zix' '-I' 'ext/weakjack' '-I'
'../ext/weakjack' '-I' '../inc/plugins/lv2' '-I'
'../subprojects/libcyaml/include' '-I' 'subprojects/libaudec' '-I'
'../subprojects/libaudec' '-I' 'subprojects/libaudec/inc' '-I'
'../subprojects/libaudec/inc' '-I' '../subprojects/reproc/reproc/include' '-I'
'subprojects/reproc/__CMake_build' '-I' '../subprojects/reproc/__CMake_build'
'-I' 'subprojects/reproc' '-I' '../subprojects/reproc' '-I'
'subprojects/libbacktrace' '-I' '/usr/include/libadwaita-1' '-I'
'/usr/include/gtk-4.0' '-I' '/usr/include/pango-1.0' '-I'
'/usr/include/glib-2.0' '-I' '/usr/lib/glib-2.0/include' '-I'
'/usr/include/sysprof-4' '-I' '/usr/include/harfbuzz' '-I'
'/usr/include/freetype2' '-I' '/usr/include/libpng16' '-I'
'/usr/include/libmount' '-I' '/usr/include/blkid' '-I' '/usr/include/fribidi'
'-I' '/usr/include/cairo' '-I' '/usr/include/lzo' '-I' '/usr/include/pixman-1'
'-I' '/usr/include/gdk-pixbuf-2.0' '-I' '/usr/include/graphene-1.0' '-I'
'/usr/lib/graphene-1.0/include' '-I' '/usr/include/gio-unix-2.0' '-I'
'/usr/include/libpanel-1' '-I' '/usr/include/opus' '-I' '/usr/include/graphviz'
'-I' '/usr/include/guile/2.2' '-I' '/usr/include/carla' '-I'
'/usr/include/carla/includes' '-I' '/usr/include/serd-0' '-I'
'/usr/include/sord-0' '-I' '/usr/include/sratom-0' '-I' '/usr/include/lilv-0'
'-I' '/usr/include/gtksourceview-5' '-I' '/usr/include/libxml2' '-I'
'/usr/include/valgrind' '-I'
'/home/alex/Documents/git/zrythm/build/subprojects/libbacktrace/dist/home/alex/local/include'
'-I' '/usr/include/json-glib-1.0' '-D' '_FILE_OFFSET_BITS=64' '-Wall'
'-Winvalid-pch' '-Wextra' '-std=gnu11' '-O0' '-g' '-D'
'GLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_66' '-D'
'GLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_66' '-D'
'GDK_VERSION_MIN_REQUIRED=GDK_VERSION_4_6' '-D'
'GDK_VERSION_MAX_ALLOWED=GDK_VERSION_4_6' '-Wno-bad-function-cast'
'-Wno-old-style-declaration' '-Werror=absolute-value' '-Wformat=2'
'-mfpmath=sse' '-g3' '-D' 'GETTEXT_PACKAGE="zrythm"' '-fPIC' '-pthread'
'-mfpmath=sse' '-D' 'REAL_BUILD' '-D' '_REENTRANT' '-mfpmath=sse'
'-mfpmath=sse' '-mfpmath=sse' '-Wformat=2' '-Wno-missing-field-initializers'
'-Wno-unused-parameter' '-Wno-sequence-point' '-Wignored-qualifiers'
'-Wno-cast-function-type' '-Walloca' '-fno-common' '-D'
'LV2_UI__Gtk4UI="https://lv2plug.in/ns/extensions/ui#Gtk4UI"' '-D'
'GDK_DISABLE_DEPRECATED' '-D' 'GTK_DISABLE_DEPRECATED' '-D' '__(x)=x' '-D'
'G_LOG_USE_STRUCTURED=1' '-D' 'G_LOG_DOMAIN="zrythm"' '-D' 'REALTIME=' '-D'
'DEPRECATED_MSG(x)=__attribute__((deprecated(x)))' '-D'
'OPTIMIZE(x)=__attribute__((optimize(#x)))' '-D' 'OPTIMIZE_O0=OPTIMIZE(00)'
'-D' 'OPTIMIZE_O1=OPTIMIZE(01)' '-D' 'OPTIMIZE_O2=OPTIMIZE(02)' '-D'
'OPTIMIZE_O3=OPTIMIZE(03)' '-D'
'NONNULL_ARGS(...)=__attribute__((nonnull(__VA_ARGS__)))' '-D'
'ACCESS(...)=__attribute__((access(__VA_ARGS__)))' '-D'
'ACCESS_READ_ONLY(...)=ACCESS(read_only,__VA_ARGS__)' '-frecord-gcc-switches'
'-D' 'ALWAYS_INLINE=__attribute__((always_inline))' '-D'
'COLD=__attribute__((cold))' '-D' 'HOT=__attribute__((hot))' '-D'
'PURE=__attribute__((pure))' '-D' 'NONNULL=__attribute__((nonnull))' '-D'
'RETURNS_NONNULL=__attribute__((returns_nonnull))' '-D'
'STACK_PROTECT=__attribute__((stack_protect))' '-D'
'NO_STACK_PROTECTOR=__attribute__((no_stack_protector))' '-D'
'WARN_UNUSED_RESULT=__attribute__((warn_unused_result))' '-D'
'CONST=__attribute__((const))' '-D' 'MALLOC=__attribute__((malloc))'
'-march=native' '-mtune=native' '-ffast-math' '-D' 'PIC' '-fdata-sections'
'-ffunction-sections' '-freciprocal-math' '-fsingle-precision-constant' '-msse'
'-msse2' '-mfpmath=sse' '-fno-math-errno' '-fno-omit-frame-pointer' '-g3'
'-Werror=format=2' '-Werror=format-overflow' '-Werror=format-truncation'
'-Werror=clobbered' '-Werror=disabled-optimization' '-Werror=float-equal'
'-Werror=logical-op' '-Werror=pointer-arith' '-Werror=enum-conversion'
'-Werror=overlength-strings' '-Werror=stringop-truncation'
'-Werror=missing-declarations' '-Werror=int-to-pointer-cast' '-Werror=shadow'
'-Werror=undef' '-Werror=unused' '-fstrict-aliasing' '-Wstrict-aliasing=2'
'-Werror=strict-aliasing' '-Wstrict-overflow=2' '-fstrict-overflow'
'-Werror=duplicated-branches' '-Werror=duplicated-cond'
'-Werror=null-dereference' '-Werror=init-self' '-Werror=jump-misses-init'
'-Werror=missing-prototypes' '-Werror=nested-externs' '-Werror=write-strings'
'-Werror=sign-compare' '-Werror=discarded-qualifiers'
'-Werror=float-conversion' '-Werror=implicit-function-declaration'
'-Werror=uninitialized' '-Werror=maybe-uninitialized' '-Werror=return-type'
'-Werror=int-conversion' '-Werror=incompatible-pointer-types'
'-Werror=implicit-int' '-Werror=multistatement-macros' '-Werror=switch'
'-Werror=overflow' '-Werror=array-bounds' '-Werror=enum-compare'
'-Werror=misleading-indentation' '-Werror=int-in-bool-context'
'-Werror=type-limits' '-Werror=deprecated-declarations' '-Werror=endif-labels'
'-Werror=logical-not-parentheses' '-Werror=parentheses' '-Werror=comment'
'-Werror=sizeof-pointer-div' '-Werror=shift-count-overflow'
'-Werror=free-nonheap-object' '-fanalyzer'
'-Werror=analyzer-possible-null-dereference' '-Werror=analyzer-malloc-leak'
'-Werror=analyzer-null-dereference' '-Werror=analyzer-null-argument' '-v'
'-save-temps' '-Werror=analyzer-use-after-free'
'-Werror=analyzer-possible-null-argument' '-Werror=analyzer-double-free'
'-Werror=analyzer-file-leak' '-Werror=nonnull' '-Werror=nonnull-compare'
'-Werror=override-init' '-Werror=bool-compare' '-Werror=tautological-compare'
'-Werror=unused-result' '-Werror=inline' '-Werror=duplicate-decl-specifier'
'-Werror=redundant-decls' '-Werror=strict-prototypes'
'-Werror=sizeof-array-argument' '-Werror=lto-type-mismatch' '-Werror=odr'
'-Wsuggest-attribute=pure' '-Wsuggest-attribute=const'
'-Wsuggest-attribute=noreturn' '-Wsuggest-attribute=format'
'-Wsuggest-attribute=malloc' '-Wsuggest-attribute=cold'
'-Werror=sign-conversion' '-Werror=implicit-fallthrough' '-MD' '-MQ'
'src/libzrythm-lib.so.p/gui_backend_arranger_object.c.o' '-MF'
'src/libzrythm-lib.so.p/gui_backend_arranger_object.c.o.d' '-o'
'src/libzrythm-lib.so.p/gui_backend_arranger_object.c.o' '-c' '-dumpdir'
'src/libzrythm-lib.so.p/'
 /usr/lib/gcc/x86_64-pc-linux-gnu/12.1.0/cc1 -fpreprocessed
src/libzrythm-lib.so.p/gui_backend_arranger_object.c.i -march=znver3 -mmmx
-mpopcnt -msse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -mavx2 -msse4a
-mno-fma4 -mno-xop -mfma -mno-avx512f -mbmi -mbmi2 -maes -mpclmul -mno-avx512vl
-mno-avx512bw -mno-avx512dq -mno-avx512cd -mno-avx512er -mno-avx512pf
-mno-avx512vbmi -mno-avx512ifma -mno-avx5124vnniw -mno-avx5124fmaps
-mno-avx512vpopcntdq -mno-avx512vbmi2 -mno-gfni -mvpclmulqdq -mno-avx512vnni
-mno-avx512bitalg -mno-avx512bf16 -mno-avx512vp2intersect -mno-3dnow -madx
-mabm -mno-cldemote -mclflushopt -mclwb -mclzero -mcx16 -mno-enqcmd -mf16c
-mfsgsbase -mfxsr -mno-hle -msahf -mno-lwp -mlzcnt -mmovbe -mno-movdir64b
-mno-movdiri -mmwaitx -mno-pconfig -mpku -mno-prefetchwt1 -mprfchw -mno-ptwrite
-mrdpid -mrdrnd -mrdseed -mno-rtm -mno-serialize -mno-sgx -msha -mshstk
-mno-tbm -mno-tsxldtrk -mvaes -mno-waitpkg -mwbnoinvd -mxsave -mxsavec
-mxsaveopt -mxsaves -mno-amx-tile -mno-amx-int8 -mno-amx-bf16 -mno-uintr
-mno-hreset -mno-kl -mno-widekl -mno-avxvnni -mno-avx512fp16 --param
l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=512
-mtune=znver3 -quiet -dumpdir src/libzrythm-lib.so.p/ -dumpbase
gui_backend_arranger_object.c.c -dumpbase-ext .c -mfpmath=sse -mfpmath=sse
-mfpmath=sse -mfpmath=sse -mfpmath=sse -msse -msse2 -mfpmath=sse -g -g3 -g3 -O0
-Wall -Winvalid-pch -Wextra -Wno-bad-function-cast -Wno-old-style-declaration
-Werror=absolute-value -Wformat=2 -Wformat=2 -Wno-missing-field-initializers
-Wno-unused-parameter -Wno-sequence-point -Wignored-qualifiers
-Wno-cast-function-type -Walloca -Werror=format=2 -Werror=format-overflow
-Werror=format-truncation -Werror=clobbered -Werror=disabled-optimization
-Werror=float-equal -Werror=logical-op -Werror=pointer-arith
-Werror=enum-conversion -Werror=overlength-strings -Werror=stringop-truncation
-Werror=missing-declarations -Werror=int-to-pointer-cast -Werror=shadow
-Werror=undef -Werror=unused -Wstrict-aliasing=2 -Werror=strict-aliasing
-Wstrict-overflow=2 -Werror=duplicated-branches -Werror=duplicated-cond
-Werror=null-dereference -Werror=init-self -Werror=jump-misses-init
-Werror=missing-prototypes -Werror=nested-externs -Werror=write-strings
-Werror=sign-compare -Werror=discarded-qualifiers -Werror=float-conversion
-Werror=implicit-function-declaration -Werror=uninitialized
-Werror=maybe-uninitialized -Werror=return-type -Werror=int-conversion
-Werror=incompatible-pointer-types -Werror=implicit-int
-Werror=multistatement-macros -Werror=switch -Werror=overflow
-Werror=array-bounds -Werror=enum-compare -Werror=misleading-indentation
-Werror=int-in-bool-context -Werror=type-limits -Werror=deprecated-declarations
-Werror=endif-labels -Werror=logical-not-parentheses -Werror=parentheses
-Werror=comment -Werror=sizeof-pointer-div -Werror=shift-count-overflow
-Werror=free-nonheap-object -Werror=analyzer-possible-null-dereference
-Werror=analyzer-malloc-leak -Werror=analyzer-null-dereference
-Werror=analyzer-null-argument -Werror=analyzer-use-after-free
-Werror=analyzer-possible-null-argument -Werror=analyzer-double-free
-Werror=analyzer-file-leak -Werror=nonnull -Werror=nonnull-compare
-Werror=override-init -Werror=bool-compare -Werror=tautological-compare
-Werror=unused-result -Werror=inline -Werror=duplicate-decl-specifier
-Werror=redundant-decls -Werror=strict-prototypes -Werror=sizeof-array-argument
-Werror=lto-type-mismatch -Werror=odr -Wsuggest-attribute=pure
-Wsuggest-attribute=const -Wsuggest-attribute=noreturn
-Wsuggest-attribute=format -Wsuggest-attribute=malloc -Wsuggest-attribute=cold
-Werror=sign-conversion -Werror=implicit-fallthrough -std=gnu11 -version
-fdiagnostics-color=always -fPIC -fno-common -frecord-gcc-switches -ffast-math
-fdata-sections -ffunction-sections -freciprocal-math
-fsingle-precision-constant -fno-math-errno -fno-omit-frame-pointer
-fstrict-aliasing -fstrict-overflow -fanalyzer -o
src/libzrythm-lib.so.p/gui_backend_arranger_object.c.s
GNU C11 (GCC) version 12.1.0 (x86_64-pc-linux-gnu)
        compiled by GNU C version 12.1.0, GMP version 6.2.1, MPFR version
4.1.0-p13, MPC version 1.2.1, isl version isl-0.25-GMP

GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
GNU C11 (GCC) version 12.1.0 (x86_64-pc-linux-gnu)
        compiled by GNU C version 12.1.0, GMP version 6.2.1, MPFR version
4.1.0-p13, MPC version 1.2.1, isl version isl-0.25-GMP

GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: 3e6a47a96552b6758214eb71bda8ede7
../src/gui/backend/arranger_object.c: 関数 ‘arranger_object_get_track’ 内:
../src/gui/backend/arranger_object.c:1936:9: エラー: dereference of NULL ‘self’
[CWE-476] [-Werror=analyzer-null-dereference]
 1936 |     self->is_auditioner ? SAMPLE_PROCESSOR->tracklist : TRACKLIST;
      |     ~~~~^~~~~~~~~~~~~~~
  ‘arranger_object_unsplit’: event 1
    |
    |../src/gui/backend/arranger_object.c:3021:1:
    | 3021 | arranger_object_unsplit (
    |      | ^~~~~~~~~~~~~~~~~~~~~~~
    |      | |
    |      | (1) entry to ‘arranger_object_unsplit’
    |
  ‘arranger_object_unsplit’: event 2
    |
    |../src/gui/backend/arranger_object.c:3043:10:
    | 3043 |   *obj = arranger_object_clone (r1);
    |      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~
    |      |          |
    |      |          (2) calling ‘arranger_object_clone’ from
‘arranger_object_unsplit’
    |
    +--> ‘arranger_object_clone’: events 3-6
           |
           |../src/gui/backend/arranger_object.c:2568:1:
           | 2568 | arranger_object_clone (const ArrangerObject * self)
           |      | ^~~~~~~~~~~~~~~~~~~~~
           |      | |
           |      | (3) entry to ‘arranger_object_clone’
           | 2569 | {
           | 2570 |   g_return_val_if_fail (self, NULL);
           |      |           ~                   ~~~~~~                        
           |      |           |                   |                            
                                                  |
           |      |           |                   (5) ...to here               
                                 (6) ‘r1’ is NULL
           |      |           (4) following ‘false’ branch (when ‘self’ is
NULL)...
           |
    <------+
    |
  ‘arranger_object_unsplit’: events 7-8
    |
    |../src/gui/backend/arranger_object.c:3043:10:
    | 3043 |   *obj = arranger_object_clone (r1);
    |      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~
    |      |          |
    |      |          (7) returning to ‘arranger_object_unsplit’ from
‘arranger_object_clone’
    |......
    | 3047 |   arranger_object_end_pos_setter (*obj, &r2->end_pos);
    |      |   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    |      |   |
    |      |   (8) calling ‘arranger_object_end_pos_setter’ from
‘arranger_object_unsplit’
    |
    +--> ‘arranger_object_end_pos_setter’: events 9-10
           |
           |../src/gui/backend/arranger_object.c:1752:1:
           | 1752 | arranger_object_end_pos_setter (
           |      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      | |
           |      | (9) entry to ‘arranger_object_end_pos_setter’
           |......
           | 1756 |   arranger_object_set_position (
           |      |   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |   |
           |      |   (10) calling ‘arranger_object_set_position’ from
‘arranger_object_end_pos_setter’
           | 1757 |     self, pos, ARRANGER_OBJECT_POSITION_TYPE_END,
F_VALIDATE);
           |      |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |
           +--> ‘arranger_object_set_position’: events 11-13
                  |
                  |../src/gui/backend/arranger_object.c:675:1:
                  |  675 | arranger_object_set_position (
                  |      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
                  |      | |
                  |      | (11) entry to ‘arranger_object_set_position’
                  |......
                  |  681 |   g_return_if_fail (self && pos);
                  |      |           ~                                          
                  |      |           |                          |
                  |      |           |                          (13) ...to here
                  |      |           (12) following ‘false’ branch (when ‘self’
is NULL)...
                  |
           <------+
           |
         ‘arranger_object_end_pos_setter’: event 14
           |
           |../src/gui/backend/arranger_object.c:1756:3:
           | 1756 |   arranger_object_set_position (
           |      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |   |
           |      |   (14) returning to ‘arranger_object_end_pos_setter’ from
‘arranger_object_set_position’
           | 1757 |     self, pos, ARRANGER_OBJECT_POSITION_TYPE_END,
F_VALIDATE);
           |      |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |
    <------+
    |
  ‘arranger_object_unsplit’: events 15-19
    |
    |../src/gui/backend/arranger_object.c:3047:3:
    | 3047 |   arranger_object_end_pos_setter (*obj, &r2->end_pos);
    |      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    |      |   |
    |      |   (15) returning to ‘arranger_object_unsplit’ from
‘arranger_object_end_pos_setter’
    |......
    | 3056 |   switch (r1->type)
    |      |   ~~~~~~  ~~~~~~~~
    |      |   |         |
    |      |   |         (16) state of ‘INIT_VAL(r1_80(D))’: ‘null’ -> ‘stop’
(NULL origin)
    |      |   (17) following ‘case 2:’ branch...
    | 3057 |     {
    | 3058 |     case ARRANGER_OBJECT_TYPE_REGION:
    |      |     ~~~~
    |      |     |
    |      |     (18) ...to here
    |......
    | 3061 |         AutomationTrack * at = NULL;
    |      |                           ~~
    |      |                           |
    |      |                           (19) ‘r1’ is NULL
    |
  ‘arranger_object_unsplit’: events 20-23
    |
    |../src/gui/backend/arranger_object.c:3062:12:
    | 3062 |         if (r1_region->id.type == REGION_TYPE_AUTOMATION)
    |      |            ^
    |      |            |
    |      |            (20) following ‘false’ branch...
    |......
    | 3066 |         track_add_region (
    |      |         ~~~~~~~~~~~~~~~~~~
    |      |         |
    |      |         (21) ...to here
    |      |         (22) state of ‘INIT_VAL(r1_80(D))’: ‘null’ -> ‘stop’ (NULL
origin)
    |      |         (23) calling ‘arranger_object_get_track’ from
‘arranger_object_unsplit’
    | 3067 |           arranger_object_get_track (r1), (ZRegion *) *obj,
    |      |           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    | 3068 |           at, ((ZRegion *) r1)->id.lane_pos, F_GEN_NAME,
    |      |           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    | 3069 |           fire_events);
    |      |           ~~~~~~~~~~~~
    |
    +--> ‘arranger_object_get_track’: events 24-25
           |
           |../src/gui/backend/arranger_object.c:1930:1:
           | 1930 | arranger_object_get_track (const ArrangerObject * const
self)
           |      | ^~~~~~~~~~~~~~~~~~~~~~~~~
           |      | |
           |      | (24) entry to ‘arranger_object_get_track’
           | 1931 | {
           | 1932 |   g_return_val_if_fail (IS_ARRANGER_OBJECT (self), NULL);
           |      |           ~
           |      |           |
           |      |           (25) following ‘true’ branch...
           |
         ‘arranger_object_get_track’: event 26
           |
           |cc1:
           | (26): ...to here
           |
         ‘arranger_object_get_track’: event 27
           |
           |../src/gui/backend/arranger_object.c:1934:11:
           | 1934 |   Track *     track = NULL;
           |      |           ^~~~~
           |      |           |
           |      |           (27) ‘self’ is NULL
           |
         ‘arranger_object_get_track’: event 28
           |
           |../src/gui/backend/arranger_object.c:1936:9:
           | 1936 |     self->is_auditioner ? SAMPLE_PROCESSOR->tracklist :
TRACKLIST;
           |      |     ~~~~^~~~~~~~~~~~~~~
           |      |         |
           |      |         (28) dereference of NULL ‘self’
           |
../src/gui/backend/arranger_object.c: 関数 ‘arranger_object_unsplit’ 内:
../src/gui/backend/arranger_object.c:3056:13: エラー: dereference of NULL ‘r1’
[CWE-476] [-Werror=analyzer-null-dereference]
 3056 |   switch (r1->type)
      |           ~~^~~~~~
  ‘arranger_object_unsplit’: event 1
    |
    |../src/gui/backend/arranger_object.c:3021:1:
    | 3021 | arranger_object_unsplit (
    |      | ^~~~~~~~~~~~~~~~~~~~~~~
    |      | |
    |      | (1) entry to ‘arranger_object_unsplit’
    |
  ‘arranger_object_unsplit’: event 2
    |
    |../src/gui/backend/arranger_object.c:3043:10:
    | 3043 |   *obj = arranger_object_clone (r1);
    |      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~
    |      |          |
    |      |          (2) calling ‘arranger_object_clone’ from
‘arranger_object_unsplit’
    |
    +--> ‘arranger_object_clone’: events 3-6
           |
           |../src/gui/backend/arranger_object.c:2568:1:
           | 2568 | arranger_object_clone (const ArrangerObject * self)
           |      | ^~~~~~~~~~~~~~~~~~~~~
           |      | |
           |      | (3) entry to ‘arranger_object_clone’
           | 2569 | {
           | 2570 |   g_return_val_if_fail (self, NULL);
           |      |           ~                   ~~~~~~                        
           |      |           |                   |                            
                                                  |
           |      |           |                   (5) ...to here               
                                 (6) ‘r1’ is NULL
           |      |           (4) following ‘false’ branch (when ‘self’ is
NULL)...
           |
    <------+
    |
  ‘arranger_object_unsplit’: events 7-8
    |
    |../src/gui/backend/arranger_object.c:3043:10:
    | 3043 |   *obj = arranger_object_clone (r1);
    |      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~
    |      |          |
    |      |          (7) returning to ‘arranger_object_unsplit’ from
‘arranger_object_clone’
    |......
    | 3047 |   arranger_object_end_pos_setter (*obj, &r2->end_pos);
    |      |   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    |      |   |
    |      |   (8) calling ‘arranger_object_end_pos_setter’ from
‘arranger_object_unsplit’
    |
    +--> ‘arranger_object_end_pos_setter’: events 9-10
           |
           |../src/gui/backend/arranger_object.c:1752:1:
           | 1752 | arranger_object_end_pos_setter (
           |      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      | |
           |      | (9) entry to ‘arranger_object_end_pos_setter’
           |......
           | 1756 |   arranger_object_set_position (
           |      |   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |   |
           |      |   (10) calling ‘arranger_object_set_position’ from
‘arranger_object_end_pos_setter’
           | 1757 |     self, pos, ARRANGER_OBJECT_POSITION_TYPE_END,
F_VALIDATE);
           |      |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |
           +--> ‘arranger_object_set_position’: events 11-13
                  |
                  |../src/gui/backend/arranger_object.c:675:1:
                  |  675 | arranger_object_set_position (
                  |      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
                  |      | |
                  |      | (11) entry to ‘arranger_object_set_position’
                  |......
                  |  681 |   g_return_if_fail (self && pos);
                  |      |           ~                                          
                  |      |           |                          |
                  |      |           |                          (13) ...to here
                  |      |           (12) following ‘false’ branch (when ‘self’
is NULL)...
                  |
           <------+
           |
         ‘arranger_object_end_pos_setter’: event 14
           |
           |../src/gui/backend/arranger_object.c:1756:3:
           | 1756 |   arranger_object_set_position (
           |      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |   |
           |      |   (14) returning to ‘arranger_object_end_pos_setter’ from
‘arranger_object_set_position’
           | 1757 |     self, pos, ARRANGER_OBJECT_POSITION_TYPE_END,
F_VALIDATE);
           |      |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |
    <------+
    |
  ‘arranger_object_unsplit’: events 15-16
    |
    |../src/gui/backend/arranger_object.c:3047:3:
    | 3047 |   arranger_object_end_pos_setter (*obj, &r2->end_pos);
    |      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    |      |   |
    |      |   (15) returning to ‘arranger_object_unsplit’ from
‘arranger_object_end_pos_setter’
    |......
    | 3056 |   switch (r1->type)
    |      |           ~~~~~~~~
    |      |             |
    |      |             (16) dereference of NULL ‘r1’
    |
../src/gui/backend/arranger_object.c:3066:9: エラー: use of NULL ‘r1’ where
non-null expected [CWE-476] [-Werror=analyzer-null-argument]
 3066 |         track_add_region (
      |         ^~~~~~~~~~~~~~~~~~
 3067 |           arranger_object_get_track (r1), (ZRegion *) *obj,
      |           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 3068 |           at, ((ZRegion *) r1)->id.lane_pos, F_GEN_NAME,
      |           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 3069 |           fire_events);
      |           ~~~~~~~~~~~~
  ‘arranger_object_unsplit’: event 1
    |
    |../src/gui/backend/arranger_object.c:3021:1:
    | 3021 | arranger_object_unsplit (
    |      | ^~~~~~~~~~~~~~~~~~~~~~~
    |      | |
    |      | (1) entry to ‘arranger_object_unsplit’
    |
  ‘arranger_object_unsplit’: event 2
    |
    |../src/gui/backend/arranger_object.c:3043:10:
    | 3043 |   *obj = arranger_object_clone (r1);
    |      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~
    |      |          |
    |      |          (2) calling ‘arranger_object_clone’ from
‘arranger_object_unsplit’
    |
    +--> ‘arranger_object_clone’: events 3-6
           |
           |../src/gui/backend/arranger_object.c:2568:1:
           | 2568 | arranger_object_clone (const ArrangerObject * self)
           |      | ^~~~~~~~~~~~~~~~~~~~~
           |      | |
           |      | (3) entry to ‘arranger_object_clone’
           | 2569 | {
           | 2570 |   g_return_val_if_fail (self, NULL);
           |      |           ~                   ~~~~~~                        
           |      |           |                   |                            
                                                  |
           |      |           |                   (5) ...to here               
                                 (6) ‘r1’ is NULL
           |      |           (4) following ‘false’ branch (when ‘self’ is
NULL)...
           |
    <------+
    |
  ‘arranger_object_unsplit’: events 7-8
    |
    |../src/gui/backend/arranger_object.c:3043:10:
    | 3043 |   *obj = arranger_object_clone (r1);
    |      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~
    |      |          |
    |      |          (7) returning to ‘arranger_object_unsplit’ from
‘arranger_object_clone’
    |......
    | 3047 |   arranger_object_end_pos_setter (*obj, &r2->end_pos);
    |      |   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    |      |   |
    |      |   (8) calling ‘arranger_object_end_pos_setter’ from
‘arranger_object_unsplit’
    |
    +--> ‘arranger_object_end_pos_setter’: events 9-10
           |
           |../src/gui/backend/arranger_object.c:1752:1:
           | 1752 | arranger_object_end_pos_setter (
           |      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      | |
           |      | (9) entry to ‘arranger_object_end_pos_setter’
           |......
           | 1756 |   arranger_object_set_position (
           |      |   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |   |
           |      |   (10) calling ‘arranger_object_set_position’ from
‘arranger_object_end_pos_setter’
           | 1757 |     self, pos, ARRANGER_OBJECT_POSITION_TYPE_END,
F_VALIDATE);
           |      |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |
           +--> ‘arranger_object_set_position’: events 11-13
                  |
                  |../src/gui/backend/arranger_object.c:675:1:
                  |  675 | arranger_object_set_position (
                  |      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
                  |      | |
                  |      | (11) entry to ‘arranger_object_set_position’
                  |......
                  |  681 |   g_return_if_fail (self && pos);
                  |      |           ~                                          
                  |      |           |                          |
                  |      |           |                          (13) ...to here
                  |      |           (12) following ‘false’ branch (when ‘self’
is NULL)...
                  |
           <------+
           |
         ‘arranger_object_end_pos_setter’: event 14
           |
           |../src/gui/backend/arranger_object.c:1756:3:
           | 1756 |   arranger_object_set_position (
           |      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |   |
           |      |   (14) returning to ‘arranger_object_end_pos_setter’ from
‘arranger_object_set_position’
           | 1757 |     self, pos, ARRANGER_OBJECT_POSITION_TYPE_END,
F_VALIDATE);
           |      |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |
    <------+
    |
  ‘arranger_object_unsplit’: events 15-19
    |
    |../src/gui/backend/arranger_object.c:3047:3:
    | 3047 |   arranger_object_end_pos_setter (*obj, &r2->end_pos);
    |      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    |      |   |
    |      |   (15) returning to ‘arranger_object_unsplit’ from
‘arranger_object_end_pos_setter’
    |......
    | 3056 |   switch (r1->type)
    |      |   ~~~~~~  ~~~~~~~~
    |      |   |         |
    |      |   |         (16) state of ‘INIT_VAL(r1_80(D))’: ‘null’ -> ‘stop’
(NULL origin)
    |      |   (17) following ‘case 2:’ branch...
    | 3057 |     {
    | 3058 |     case ARRANGER_OBJECT_TYPE_REGION:
    |      |     ~~~~
    |      |     |
    |      |     (18) ...to here
    |......
    | 3061 |         AutomationTrack * at = NULL;
    |      |                           ~~
    |      |                           |
    |      |                           (19) ‘r1’ is NULL
    |
  ‘arranger_object_unsplit’: events 20-22
    |
    |../src/gui/backend/arranger_object.c:3062:12:
    | 3062 |         if (r1_region->id.type == REGION_TYPE_AUTOMATION)
    |      |            ^
    |      |            |
    |      |            (20) following ‘false’ branch...
    |......
    | 3066 |         track_add_region (
    |      |         ~~~~~~~~~~~~~~~~~~
    |      |         |
    |      |         (21) ...to here
    |      |         (22) argument 1 (‘r1’) NULL where non-null expected
    | 3067 |           arranger_object_get_track (r1), (ZRegion *) *obj,
    |      |           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    | 3068 |           at, ((ZRegion *) r1)->id.lane_pos, F_GEN_NAME,
    |      |           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    | 3069 |           fire_events);
    |      |           ~~~~~~~~~~~~
    |
../src/gui/backend/arranger_object.c:1930:1: 備考: argument 1 of
‘arranger_object_get_track’ must be non-null
 1930 | arranger_object_get_track (const ArrangerObject * const self)
      | ^~~~~~~~~~~~~~~~~~~~~~~~~
../src/gui/backend/arranger_object.c:3092:3: エラー: use of NULL ‘r1’ where
non-null expected [CWE-476] [-Werror=analyzer-null-argument]
 3092 |   arranger_selections_remove_object (sel, r1);
      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  ‘arranger_object_unsplit’: event 1
    |
    |../src/gui/backend/arranger_object.c:3021:1:
    | 3021 | arranger_object_unsplit (
    |      | ^~~~~~~~~~~~~~~~~~~~~~~
    |      | |
    |      | (1) entry to ‘arranger_object_unsplit’
    |
  ‘arranger_object_unsplit’: event 2
    |
    |../src/gui/backend/arranger_object.c:3043:10:
    | 3043 |   *obj = arranger_object_clone (r1);
    |      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~
    |      |          |
    |      |          (2) calling ‘arranger_object_clone’ from
‘arranger_object_unsplit’
    |
    +--> ‘arranger_object_clone’: events 3-6
           |
           |../src/gui/backend/arranger_object.c:2568:1:
           | 2568 | arranger_object_clone (const ArrangerObject * self)
           |      | ^~~~~~~~~~~~~~~~~~~~~
           |      | |
           |      | (3) entry to ‘arranger_object_clone’
           | 2569 | {
           | 2570 |   g_return_val_if_fail (self, NULL);
           |      |           ~                   ~~~~~~                        
           |      |           |                   |                            
                                                  |
           |      |           |                   (5) ...to here               
                                 (6) ‘r1’ is NULL
           |      |           (4) following ‘false’ branch (when ‘self’ is
NULL)...
           |
    <------+
    |
  ‘arranger_object_unsplit’: events 7-8
    |
    |../src/gui/backend/arranger_object.c:3043:10:
    | 3043 |   *obj = arranger_object_clone (r1);
    |      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~
    |      |          |
    |      |          (7) returning to ‘arranger_object_unsplit’ from
‘arranger_object_clone’
    |......
    | 3047 |   arranger_object_end_pos_setter (*obj, &r2->end_pos);
    |      |   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    |      |   |
    |      |   (8) calling ‘arranger_object_end_pos_setter’ from
‘arranger_object_unsplit’
    |
    +--> ‘arranger_object_end_pos_setter’: events 9-10
           |
           |../src/gui/backend/arranger_object.c:1752:1:
           | 1752 | arranger_object_end_pos_setter (
           |      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      | |
           |      | (9) entry to ‘arranger_object_end_pos_setter’
           |......
           | 1756 |   arranger_object_set_position (
           |      |   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |   |
           |      |   (10) calling ‘arranger_object_set_position’ from
‘arranger_object_end_pos_setter’
           | 1757 |     self, pos, ARRANGER_OBJECT_POSITION_TYPE_END,
F_VALIDATE);
           |      |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |
           +--> ‘arranger_object_set_position’: events 11-13
                  |
                  |../src/gui/backend/arranger_object.c:675:1:
                  |  675 | arranger_object_set_position (
                  |      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
                  |      | |
                  |      | (11) entry to ‘arranger_object_set_position’
                  |......
                  |  681 |   g_return_if_fail (self && pos);
                  |      |           ~                                          
                  |      |           |                          |
                  |      |           |                          (13) ...to here
                  |      |           (12) following ‘false’ branch (when ‘self’
is NULL)...
                  |
           <------+
           |
         ‘arranger_object_end_pos_setter’: event 14
           |
           |../src/gui/backend/arranger_object.c:1756:3:
           | 1756 |   arranger_object_set_position (
           |      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |   |
           |      |   (14) returning to ‘arranger_object_end_pos_setter’ from
‘arranger_object_set_position’
           | 1757 |     self, pos, ARRANGER_OBJECT_POSITION_TYPE_END,
F_VALIDATE);
           |      |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |
    <------+
    |
  ‘arranger_object_unsplit’: events 15-19
    |
    |../src/gui/backend/arranger_object.c:3047:3:
    | 3047 |   arranger_object_end_pos_setter (*obj, &r2->end_pos);
    |      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    |      |   |
    |      |   (15) returning to ‘arranger_object_unsplit’ from
‘arranger_object_end_pos_setter’
    |......
    | 3056 |   switch (r1->type)
    |      |   ~~~~~~  ~~~~~~~~
    |      |   |         |
    |      |   |         (16) state of ‘INIT_VAL(r1_80(D))’: ‘null’ -> ‘stop’
(NULL origin)
    |      |   (17) following ‘case 2:’ branch...
    | 3057 |     {
    | 3058 |     case ARRANGER_OBJECT_TYPE_REGION:
    |      |     ~~~~
    |      |     |
    |      |     (18) ...to here
    |......
    | 3061 |         AutomationTrack * at = NULL;
    |      |                           ~~
    |      |                           |
    |      |                           (19) ‘r1’ is NULL
    |
  ‘arranger_object_unsplit’: events 20-21
    |
    |../src/gui/backend/arranger_object.c:3066:9:
    | 3066 |         track_add_region (
    |      |         ^~~~~~~~~~~~~~~~~~
    |      |         |
    |      |         (20) state of ‘INIT_VAL(r1_80(D))’: ‘null’ -> ‘stop’ (NULL
origin)
    |      |         (21) calling ‘arranger_object_get_track’ from
‘arranger_object_unsplit’
    | 3067 |           arranger_object_get_track (r1), (ZRegion *) *obj,
    |      |           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    | 3068 |           at, ((ZRegion *) r1)->id.lane_pos, F_GEN_NAME,
    |      |           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    | 3069 |           fire_events);
    |      |           ~~~~~~~~~~~~
    |
    +--> ‘arranger_object_get_track’: events 22-23
           |
           |../src/gui/backend/arranger_object.c:1930:1:
           | 1930 | arranger_object_get_track (const ArrangerObject * const
self)
           |      | ^~~~~~~~~~~~~~~~~~~~~~~~~
           |      | |
           |      | (22) entry to ‘arranger_object_get_track’
           | 1931 | {
           | 1932 |   g_return_val_if_fail (IS_ARRANGER_OBJECT (self), NULL);
           |      |                                                             
           |      |                                                            
                                                                               
                                                                               
                                                                               
        |
           |      |                                                            
                                                                               
                                                                               
                                                                               
        (23) ‘r1’ is NULL
           |
    <------+
    |
  ‘arranger_object_unsplit’: events 24-27
    |
    |../src/gui/backend/arranger_object.c:3066:9:
    | 3066 |         track_add_region (
    |      |         ^~~~~~~~~~~~~~~~~~
    |      |         |
    |      |         (24) returning to ‘arranger_object_unsplit’ from
‘arranger_object_get_track’
    | 3067 |           arranger_object_get_track (r1), (ZRegion *) *obj,
    |      |           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    | 3068 |           at, ((ZRegion *) r1)->id.lane_pos, F_GEN_NAME,
    |      |           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    | 3069 |           fire_events);
    |      |           ~~~~~~~~~~~~
    |......
    | 3091 |   g_return_if_fail (sel);
    |      |           ~
    |      |           |
    |      |           (25) following ‘true’ branch (when ‘sel’ is non-NULL)...
    | 3092 |   arranger_selections_remove_object (sel, r1);
    |      |   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    |      |   |
    |      |   (26) ...to here
    |      |   (27) argument 2 (‘r1’) NULL where non-null expected
    |
次のファイルから読み込み:  ../inc/gui/backend/automation_selections.h:30,
         次から読み込み:  ../src/gui/backend/arranger_object.c:16:
../inc/gui/backend/arranger_selections.h:407:1: 備考: argument 2 of
‘arranger_selections_remove_object’ must be non-null
  407 | arranger_selections_remove_object (
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cc1: いくつかの警告はエラーとして取り扱われます
ninja: build stopped: subcommand failed.
```

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug analyzer/106325] `analyzer-null-dereference` gets thrown on a parameter on a function marked with `__attribute__((nonnull))`
  2022-07-16 13:11 [Bug analyzer/106325] New: `analyzer-null-dereference` gets thrown on a parameter on a function marked with `__attribute__((nonnull))` alex at zrythm dot org
@ 2022-07-16 13:14 ` alex at zrythm dot org
  2022-07-16 13:25 ` alex at zrythm dot org
                   ` (8 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: alex at zrythm dot org @ 2022-07-16 13:14 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106325

--- Comment #1 from alex at zrythm dot org ---
I forgot to link the repo sorry. https://git.sr.ht/~alextee/zrythm on
`e6b20321`

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug analyzer/106325] `analyzer-null-dereference` gets thrown on a parameter on a function marked with `__attribute__((nonnull))`
  2022-07-16 13:11 [Bug analyzer/106325] New: `analyzer-null-dereference` gets thrown on a parameter on a function marked with `__attribute__((nonnull))` alex at zrythm dot org
  2022-07-16 13:14 ` [Bug analyzer/106325] " alex at zrythm dot org
@ 2022-07-16 13:25 ` alex at zrythm dot org
  2022-07-16 15:36 ` dmalcolm at gcc dot gnu.org
                   ` (7 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: alex at zrythm dot org @ 2022-07-16 13:25 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106325

--- Comment #2 from alex at zrythm dot org ---
Created attachment 53308
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=53308&action=edit
GCC invocation with LANG=C

Same command output in English (using LANG=C)

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug analyzer/106325] `analyzer-null-dereference` gets thrown on a parameter on a function marked with `__attribute__((nonnull))`
  2022-07-16 13:11 [Bug analyzer/106325] New: `analyzer-null-dereference` gets thrown on a parameter on a function marked with `__attribute__((nonnull))` alex at zrythm dot org
  2022-07-16 13:14 ` [Bug analyzer/106325] " alex at zrythm dot org
  2022-07-16 13:25 ` alex at zrythm dot org
@ 2022-07-16 15:36 ` dmalcolm at gcc dot gnu.org
  2022-12-05 22:58 ` [Bug analyzer/106325] -Wanalyzer-null-dereference false positive due to analyzer not making assumptions for `__attribute__((nonnull))` dmalcolm at gcc dot gnu.org
                   ` (6 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: dmalcolm at gcc dot gnu.org @ 2022-07-16 15:36 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106325

David Malcolm <dmalcolm at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
     Ever confirmed|0                           |1
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2022-07-16

--- Comment #3 from David Malcolm <dmalcolm at gcc dot gnu.org> ---
Thanks for filing this bug report.

Near the start of the analysis, it sees:

  ‘arranger_object_unsplit’: event 1
    |
    |../src/gui/backend/arranger_object.c:3021:1:
    | 3021 | arranger_object_unsplit (
    |      | ^~~~~~~~~~~~~~~~~~~~~~~
    |      | |
    |      | (1) entry to ‘arranger_object_unsplit’
    |
  ‘arranger_object_unsplit’: event 2
    |
    |../src/gui/backend/arranger_object.c:3043:10:
    | 3043 |   *obj = arranger_object_clone (r1);
    |      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~
    |      |          |
    |      |          (2) calling ‘arranger_object_clone’ from
‘arranger_object_unsplit’
    |
    +--> ‘arranger_object_clone’: events 3-6
           |
           |../src/gui/backend/arranger_object.c:2568:1:
           | 2568 | arranger_object_clone (const ArrangerObject * self)
           |      | ^~~~~~~~~~~~~~~~~~~~~
           |      | |
           |      | (3) entry to ‘arranger_object_clone’
           | 2569 | {
           | 2570 |   g_return_val_if_fail (self, NULL);
           |      |           ~                   ~~~~~~                        
           |      |           |                   |                            
                                                  |
           |      |           |                   (5) ...to here               
                                 (6) ‘r1’ is NULL
           |      |           (4) following ‘false’ branch (when ‘self’ is
NULL)...
           |
    <------+

...and so within the g_return_val_if_fail in arranger_object_clone it considers
the case in which "self" (and thus the "r1" param passed to
arranger_object_unsplit) is NULL.

However, I see this declaration in the preprocessed code:

__attribute__((nonnull(1, 2)))
void
arranger_object_unsplit (
  ArrangerObject * r1,
  ArrangerObject * r2,
  ArrangerObject ** obj,
 _Bool fire_events);

and hence the analyzer *ought* to be assuming that r1 and r2 are non-NULL, and
thus not consider the early-bailout case in that g_return_val_if_fail.

Looks like a bug in the analyzer to me; marking as confirmed (reproduced on gcc
trunk).

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug analyzer/106325] -Wanalyzer-null-dereference false positive due to analyzer not making assumptions for  `__attribute__((nonnull))`
  2022-07-16 13:11 [Bug analyzer/106325] New: `analyzer-null-dereference` gets thrown on a parameter on a function marked with `__attribute__((nonnull))` alex at zrythm dot org
                   ` (2 preceding siblings ...)
  2022-07-16 15:36 ` dmalcolm at gcc dot gnu.org
@ 2022-12-05 22:58 ` dmalcolm at gcc dot gnu.org
  2022-12-05 23:00 ` dmalcolm at gcc dot gnu.org
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: dmalcolm at gcc dot gnu.org @ 2022-12-05 22:58 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106325

--- Comment #4 from David Malcolm <dmalcolm at gcc dot gnu.org> ---
Created attachment 54023
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=54023&action=edit
Reduced reproducer

Attached is a reduced version of the reproducer, which demonstrates the false
+ve on trunk with just -fanalyzer on the command line:
  https://godbolt.org/z/fsec1f4hT
and also with gcc 12, 11, and 10.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug analyzer/106325] -Wanalyzer-null-dereference false positive due to analyzer not making assumptions for  `__attribute__((nonnull))`
  2022-07-16 13:11 [Bug analyzer/106325] New: `analyzer-null-dereference` gets thrown on a parameter on a function marked with `__attribute__((nonnull))` alex at zrythm dot org
                   ` (3 preceding siblings ...)
  2022-12-05 22:58 ` [Bug analyzer/106325] -Wanalyzer-null-dereference false positive due to analyzer not making assumptions for `__attribute__((nonnull))` dmalcolm at gcc dot gnu.org
@ 2022-12-05 23:00 ` dmalcolm at gcc dot gnu.org
  2022-12-05 23:08 ` dmalcolm at gcc dot gnu.org
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: dmalcolm at gcc dot gnu.org @ 2022-12-05 23:00 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106325

David Malcolm <dmalcolm at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |ASSIGNED

--- Comment #5 from David Malcolm <dmalcolm at gcc dot gnu.org> ---
Gah, this is slightly over-reduced, in that it removes the nonnull attributes. 
I'll try putting them back in.

Working on a fix.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug analyzer/106325] -Wanalyzer-null-dereference false positive due to analyzer not making assumptions for  `__attribute__((nonnull))`
  2022-07-16 13:11 [Bug analyzer/106325] New: `analyzer-null-dereference` gets thrown on a parameter on a function marked with `__attribute__((nonnull))` alex at zrythm dot org
                   ` (4 preceding siblings ...)
  2022-12-05 23:00 ` dmalcolm at gcc dot gnu.org
@ 2022-12-05 23:08 ` dmalcolm at gcc dot gnu.org
  2022-12-06 18:28 ` cvs-commit at gcc dot gnu.org
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: dmalcolm at gcc dot gnu.org @ 2022-12-05 23:08 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106325

--- Comment #6 from David Malcolm <dmalcolm at gcc dot gnu.org> ---
Fix for the overzealous reducing is to simply add "__attribute__((nonnull(1,
2)))" to the reproducer here:

__attribute__((nonnull(1, 2)))
void
arranger_object_unsplit (ArrangerObject *r1, ArrangerObject *r2,
                         ArrangerObject **obj, _Bool fire_events)

I'm working on a fix for the false +ve.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug analyzer/106325] -Wanalyzer-null-dereference false positive due to analyzer not making assumptions for  `__attribute__((nonnull))`
  2022-07-16 13:11 [Bug analyzer/106325] New: `analyzer-null-dereference` gets thrown on a parameter on a function marked with `__attribute__((nonnull))` alex at zrythm dot org
                   ` (5 preceding siblings ...)
  2022-12-05 23:08 ` dmalcolm at gcc dot gnu.org
@ 2022-12-06 18:28 ` cvs-commit at gcc dot gnu.org
  2022-12-06 18:56 ` dmalcolm at gcc dot gnu.org
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2022-12-06 18:28 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106325

--- Comment #7 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by David Malcolm <dmalcolm@gcc.gnu.org>:

https://gcc.gnu.org/g:dcfc7ac94dbcf6c86c0c58ce6dc1d8bd853e4093

commit r13-4520-gdcfc7ac94dbcf6c86c0c58ce6dc1d8bd853e4093
Author: David Malcolm <dmalcolm@redhat.com>
Date:   Tue Dec 6 13:26:57 2022 -0500

    analyzer: use __attribute__((nonnull)) at top level of analysis [PR106325]

    PR analyzer/106325 reports false postives from
    -Wanalyzer-null-dereference on code like this:

    __attribute__((nonnull))
    void foo_a (Foo *p)
    {
      foo_b (p);

      switch (p->type)
        {
          /* ... */
        }
    }

    where foo_b (p) has a:

      g_return_if_fail (p);

    that expands to:

      if (!p)
        {
          return;
        }

    The analyzer "sees" the comparison against NULL in foo_b, and splits the
    analysis into the NULL and not-NULL cases; later, back in foo_a,  at
      switch (p->type)
    it complains that p is NULL.

    Previously we were only using __attribute__((nonnull)) as something to
    complain about when it was violated; we weren't using it as a source of
    knowledge.

    This patch fixes things by making the analyzer respect
    __attribute__((nonnull)) at the top-level of the analysis: any such
    params are now assumed to be non-NULL, so that the analyzer assumes the
    g_return_if_fail inside foo_b doesn't fail when called from foo_a

    Doing so fixes the false positives.

    gcc/analyzer/ChangeLog:
            PR analyzer/106325
            * region-model-manager.cc
            (region_model_manager::get_or_create_null_ptr): New.
            * region-model-manager.h
            (region_model_manager::get_or_create_null_ptr): New decl.
            * region-model.cc (region_model::on_top_level_param): Add
            "nonnull" param and make use of it.
            (region_model::push_frame): When handling a top-level entrypoint
            to the analysis, determine which params __attribute__((nonnull))
            applies to, and pass to on_top_level_param.
            * region-model.h (region_model::on_top_level_param): Add "nonnull"
            param.

    gcc/testsuite/ChangeLog:
            PR analyzer/106325
            * gcc.dg/analyzer/attr-nonnull-pr106325.c: New test.
            * gcc.dg/analyzer/attribute-nonnull.c (test_6): New.
            (test_7): New.

    Signed-off-by: David Malcolm <dmalcolm@redhat.com>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug analyzer/106325] -Wanalyzer-null-dereference false positive due to analyzer not making assumptions for  `__attribute__((nonnull))`
  2022-07-16 13:11 [Bug analyzer/106325] New: `analyzer-null-dereference` gets thrown on a parameter on a function marked with `__attribute__((nonnull))` alex at zrythm dot org
                   ` (6 preceding siblings ...)
  2022-12-06 18:28 ` cvs-commit at gcc dot gnu.org
@ 2022-12-06 18:56 ` dmalcolm at gcc dot gnu.org
  2023-03-29 18:18 ` cvs-commit at gcc dot gnu.org
  2023-03-29 19:29 ` dmalcolm at gcc dot gnu.org
  9 siblings, 0 replies; 11+ messages in thread
From: dmalcolm at gcc dot gnu.org @ 2022-12-06 18:56 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106325

--- Comment #8 from David Malcolm <dmalcolm at gcc dot gnu.org> ---
Should be fixed on trunk for GCC 13 by the above patch.

Still affects GCC 12, GCC 11, and GCC 10.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug analyzer/106325] -Wanalyzer-null-dereference false positive due to analyzer not making assumptions for  `__attribute__((nonnull))`
  2022-07-16 13:11 [Bug analyzer/106325] New: `analyzer-null-dereference` gets thrown on a parameter on a function marked with `__attribute__((nonnull))` alex at zrythm dot org
                   ` (7 preceding siblings ...)
  2022-12-06 18:56 ` dmalcolm at gcc dot gnu.org
@ 2023-03-29 18:18 ` cvs-commit at gcc dot gnu.org
  2023-03-29 19:29 ` dmalcolm at gcc dot gnu.org
  9 siblings, 0 replies; 11+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2023-03-29 18:18 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106325

--- Comment #9 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-12 branch has been updated by David Malcolm
<dmalcolm@gcc.gnu.org>:

https://gcc.gnu.org/g:02fbda165b74179469d9eae436fed613aa6a6ebb

commit r12-9362-g02fbda165b74179469d9eae436fed613aa6a6ebb
Author: David Malcolm <dmalcolm@redhat.com>
Date:   Wed Mar 29 14:16:48 2023 -0400

    analyzer: use __attribute__((nonnull)) at top level of analysis [PR106325]

    PR analyzer/106325 reports false postives from
    -Wanalyzer-null-dereference on code like this:

    __attribute__((nonnull))
    void foo_a (Foo *p)
    {
      foo_b (p);

      switch (p->type)
        {
          /* ... */
        }
    }

    where foo_b (p) has a:

      g_return_if_fail (p);

    that expands to:

      if (!p)
        {
          return;
        }

    The analyzer "sees" the comparison against NULL in foo_b, and splits the
    analysis into the NULL and not-NULL cases; later, back in foo_a,  at
      switch (p->type)
    it complains that p is NULL.

    Previously we were only using __attribute__((nonnull)) as something to
    complain about when it was violated; we weren't using it as a source of
    knowledge.

    This patch fixes things by making the analyzer respect
    __attribute__((nonnull)) at the top-level of the analysis: any such
    params are now assumed to be non-NULL, so that the analyzer assumes the
    g_return_if_fail inside foo_b doesn't fail when called from foo_a

    Doing so fixes the false positives.

    Backported from r13-4520-gdcfc7ac94dbcf6.

    gcc/analyzer/ChangeLog:
            PR analyzer/106325
            * region-model-manager.cc
            (region_model_manager::get_or_create_null_ptr): New.
            * region-model.cc (region_model::on_top_level_param): Add
            "nonnull" param and make use of it.
            (region_model::push_frame): When handling a top-level entrypoint
            to the analysis, determine which params __attribute__((nonnull))
            applies to, and pass to on_top_level_param.
            * region-model.h (region_model_manager::get_or_create_null_ptr):
            New decl.
            (region_model::on_top_level_param): Add "nonnull" param.

    gcc/testsuite/ChangeLog:
            PR analyzer/106325
            * gcc.dg/analyzer/attr-nonnull-pr106325.c: New test.
            * gcc.dg/analyzer/attribute-nonnull.c (test_6): New.
            (test_7): New.

    Signed-off-by: David Malcolm <dmalcolm@redhat.com>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Bug analyzer/106325] -Wanalyzer-null-dereference false positive due to analyzer not making assumptions for  `__attribute__((nonnull))`
  2022-07-16 13:11 [Bug analyzer/106325] New: `analyzer-null-dereference` gets thrown on a parameter on a function marked with `__attribute__((nonnull))` alex at zrythm dot org
                   ` (8 preceding siblings ...)
  2023-03-29 18:18 ` cvs-commit at gcc dot gnu.org
@ 2023-03-29 19:29 ` dmalcolm at gcc dot gnu.org
  9 siblings, 0 replies; 11+ messages in thread
From: dmalcolm at gcc dot gnu.org @ 2023-03-29 19:29 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106325

--- Comment #10 from David Malcolm <dmalcolm at gcc dot gnu.org> ---
Should be fixed on gcc 12 branch by the above (for the eventual gcc 12.3
release).

Still affects GCC 11 and GCC 10.

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2023-03-29 19:29 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-07-16 13:11 [Bug analyzer/106325] New: `analyzer-null-dereference` gets thrown on a parameter on a function marked with `__attribute__((nonnull))` alex at zrythm dot org
2022-07-16 13:14 ` [Bug analyzer/106325] " alex at zrythm dot org
2022-07-16 13:25 ` alex at zrythm dot org
2022-07-16 15:36 ` dmalcolm at gcc dot gnu.org
2022-12-05 22:58 ` [Bug analyzer/106325] -Wanalyzer-null-dereference false positive due to analyzer not making assumptions for `__attribute__((nonnull))` dmalcolm at gcc dot gnu.org
2022-12-05 23:00 ` dmalcolm at gcc dot gnu.org
2022-12-05 23:08 ` dmalcolm at gcc dot gnu.org
2022-12-06 18:28 ` cvs-commit at gcc dot gnu.org
2022-12-06 18:56 ` dmalcolm at gcc dot gnu.org
2023-03-29 18:18 ` cvs-commit at gcc dot gnu.org
2023-03-29 19:29 ` dmalcolm at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).