Bug Summary

File:numpy/core/src/_simd/_simd.c
Warning:line 67, column 5
Calling function 'PyDict_SetItemString' with a PyObject argument whose ownership has been released (with stolen reference)

Annotated Source Code

Press '?' to see keyboard shortcuts

clang -cc1 -cc1 -triple x86_64-unknown-linux-gnu -analyze -disable-free -disable-llvm-verifier -discard-value-names -main-file-name _simd.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -analyzer-output=html -analyzer-checker=python -analyzer-disable-checker=deadcode -analyzer-config prune-paths=true,suppress-c++-stdlib=true,suppress-null-return-paths=false,crosscheck-with-z3=true,model-path=/opt/pyrefcon/lib/pyrefcon/models/models -analyzer-config experimental-enable-naive-ctu-analysis=true,ctu-dir=/tmp/pyrefcon/numpy/csa-scan,ctu-index-name=/tmp/pyrefcon/numpy/csa-scan/externalDefMap.txt,ctu-invocation-list=/tmp/pyrefcon/numpy/csa-scan/invocations.yaml,display-ctu-progress=false -setup-static-analyzer -analyzer-config-compatibility-mode=true -mrelocation-model pic -pic-level 2 -fhalf-no-semantic-interposition -mframe-pointer=none -fmath-errno -fno-rounding-math -mconstructor-aliases -munwind-tables -target-cpu x86-64 -target-feature +sse -target-feature +sse2 -target-feature +sse3 -tune-cpu generic -debug-info-kind=limited -dwarf-version=4 -debugger-tuning=gdb -fcoverage-compilation-dir=/tmp/pyrefcon/numpy -resource-dir /opt/pyrefcon/lib/clang/13.0.0 -isystem /opt/pyrefcon/lib/pyrefcon/models/python3.8 -D NDEBUG -D _FORTIFY_SOURCE=2 -D NPY_INTERNAL_BUILD=1 -D HAVE_NPY_CONFIG_H=1 -D _FILE_OFFSET_BITS=64 -D _LARGEFILE_SOURCE=1 -D _LARGEFILE64_SOURCE=1 -I build/src.linux-x86_64-3.8/numpy/core/src/_simd -I numpy/core/include -I build/src.linux-x86_64-3.8/numpy/core/include/numpy -I build/src.linux-x86_64-3.8/numpy/distutils/include -I numpy/core/src/common -I numpy/core/src -I numpy/core -I numpy/core/src/npymath -I numpy/core/src/multiarray -I numpy/core/src/umath -I numpy/core/src/npysort -I numpy/core/src/_simd -I build/src.linux-x86_64-3.8/numpy/core/src/common -I build/src.linux-x86_64-3.8/numpy/core/src/npymath -internal-isystem /opt/pyrefcon/lib/clang/13.0.0/include -internal-isystem /usr/local/include -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/10/../../../../x86_64-linux-gnu/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -O2 -Wno-unused-result -Wsign-compare -Wall -Wformat -Werror=format-security -Wformat -Werror=format-security -Wdate-time -fdebug-compilation-dir=/tmp/pyrefcon/numpy -ferror-limit 19 -fwrapv -pthread -stack-protector 2 -fgnuc-version=4.2.1 -vectorize-loops -vectorize-slp -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /tmp/pyrefcon/numpy/csa-scan/reports -x c numpy/core/src/_simd/_simd.c

numpy/core/src/_simd/_simd.c

1#include "_simd.h"
2
3PyMODINIT_FUNCPyObject* PyInit__simd(void)
4{
5 static struct PyModuleDef defs = {
6 .m_base = PyModuleDef_HEAD_INIT{ { 1, ((void*)0) }, ((void*)0), 0, ((void*)0), },
7 .m_name = "numpy.core._simd",
8 .m_size = -1
9 };
10 if (npy_cpu_init() < 0) {
1
Taking false branch
11 return NULL((void*)0);
12 }
13 PyObject *m = PyModule_Create(&defs)PyModule_Create2(&defs, 1013);
14 if (m == NULL((void*)0)) {
2
Assuming 'm' is not equal to NULL
3
Taking false branch
15 return NULL((void*)0);
16 }
17 PyObject *targets = PyDict_New();
4
Calling 'PyDict_New'
6
Returning from 'PyDict_New'
18 if (targets == NULL((void*)0)) {
7
Assuming 'targets' is not equal to NULL
8
Taking false branch
19 goto err;
20 }
21 if (PyModule_AddObject(m, "targets", targets) < 0) {
9
Calling 'PyModule_AddObject'
13
Returning from 'PyModule_AddObject'
14
Taking false branch
22 Py_DECREF(targets)_Py_DECREF(((PyObject*)(targets)));
23 goto err;
24 }
25 // add keys for non-supported optimizations with None value
26 #define ATTACH_MODULE(TESTED_FEATURES, TARGET_NAME, MAKE_MSVC_HAPPY){ PyObject *simd_mod; if (!TESTED_FEATURES) { _Py_INCREF(((PyObject
*)((&_Py_NoneStruct)))); simd_mod = (&_Py_NoneStruct)
; } else { simd_mod = simd_create_module_TARGET_NAME(); if (simd_mod
== ((void*)0)) { goto err; } } const char *target_name = "TARGET_NAME"
; if (PyDict_SetItemString(targets, target_name, simd_mod) <
0) { _Py_DECREF(((PyObject*)(simd_mod))); goto err; } _Py_INCREF
(((PyObject*)(simd_mod))); if (PyModule_AddObject(m, target_name
, simd_mod) < 0) { _Py_DECREF(((PyObject*)(simd_mod))); goto
err; } }
\
27 { \
28 PyObject *simd_mod; \
29 if (!TESTED_FEATURES) { \
30 Py_INCREF(Py_None)_Py_INCREF(((PyObject*)((&_Py_NoneStruct)))); \
31 simd_mod = Py_None(&_Py_NoneStruct); \
32 } else { \
33 simd_mod = NPY_CAT(simd_create_module_, TARGET_NAME)simd_create_module_TARGET_NAME(); \
34 if (simd_mod == NULL((void*)0)) { \
35 goto err; \
36 } \
37 } \
38 const char *target_name = NPY_TOSTRING(TARGET_NAME)"TARGET_NAME"; \
39 if (PyDict_SetItemString(targets, target_name, simd_mod) < 0) { \
40 Py_DECREF(simd_mod)_Py_DECREF(((PyObject*)(simd_mod))); \
41 goto err; \
42 } \
43 Py_INCREF(simd_mod)_Py_INCREF(((PyObject*)(simd_mod))); \
44 if (PyModule_AddObject(m, target_name, simd_mod) < 0) { \
45 Py_DECREF(simd_mod)_Py_DECREF(((PyObject*)(simd_mod))); \
46 goto err; \
47 } \
48 }
49
50 #define ATTACH_BASELINE_MODULE(MAKE_MSVC_HAPPY){ PyObject *simd_mod = simd_create_module(); if (simd_mod == (
(void*)0)) { goto err; } if (PyDict_SetItemString(targets, "baseline"
, simd_mod) < 0) { _Py_DECREF(((PyObject*)(simd_mod))); goto
err; } _Py_INCREF(((PyObject*)(simd_mod))); if (PyModule_AddObject
(m, "baseline", simd_mod) < 0) { _Py_DECREF(((PyObject*)(simd_mod
))); goto err; } }
\
51 { \
52 PyObject *simd_mod = simd_create_module(); \
53 if (simd_mod == NULL((void*)0)) { \
54 goto err; \
55 } \
56 if (PyDict_SetItemString(targets, "baseline", simd_mod) < 0) { \
57 Py_DECREF(simd_mod)_Py_DECREF(((PyObject*)(simd_mod))); \
58 goto err; \
59 } \
60 Py_INCREF(simd_mod)_Py_INCREF(((PyObject*)(simd_mod))); \
61 if (PyModule_AddObject(m, "baseline", simd_mod) < 0) { \
62 Py_DECREF(simd_mod)_Py_DECREF(((PyObject*)(simd_mod))); \
63 goto err; \
64 } \
65 }
66
67 NPY__CPU_DISPATCH_CALL(NPY_CPU_HAVE, ATTACH_MODULE, MAKE_MSVC_HAPPY){ PyObject *simd_mod; if (!(npy_cpu_have(NPY_CPU_FEATURE_AVX512_SKX
))) { _Py_INCREF(((PyObject*)((&_Py_NoneStruct)))); simd_mod
= (&_Py_NoneStruct); } else { simd_mod = simd_create_module_AVX512_SKX
(); if (simd_mod == ((void*)0)) { goto err; } } const char *target_name
= "AVX512_SKX"; if (PyDict_SetItemString(targets, target_name
, simd_mod) < 0) { _Py_DECREF(((PyObject*)(simd_mod))); goto
err; } _Py_INCREF(((PyObject*)(simd_mod))); if (PyModule_AddObject
(m, target_name, simd_mod) < 0) { _Py_DECREF(((PyObject*)(
simd_mod))); goto err; } } { PyObject *simd_mod; if (!(npy_cpu_have
(NPY_CPU_FEATURE_AVX512F))) { _Py_INCREF(((PyObject*)((&_Py_NoneStruct
)))); simd_mod = (&_Py_NoneStruct); } else { simd_mod = simd_create_module_AVX512F
(); if (simd_mod == ((void*)0)) { goto err; } } const char *target_name
= "AVX512F"; if (PyDict_SetItemString(targets, target_name, simd_mod
) < 0) { _Py_DECREF(((PyObject*)(simd_mod))); goto err; } _Py_INCREF
(((PyObject*)(simd_mod))); if (PyModule_AddObject(m, target_name
, simd_mod) < 0) { _Py_DECREF(((PyObject*)(simd_mod))); goto
err; } } { PyObject *simd_mod; if (!(npy_cpu_have(NPY_CPU_FEATURE_AVX
)&&npy_cpu_have(NPY_CPU_FEATURE_F16C)&&npy_cpu_have
(NPY_CPU_FEATURE_FMA3)&&npy_cpu_have(NPY_CPU_FEATURE_AVX2
))) { _Py_INCREF(((PyObject*)((&_Py_NoneStruct)))); simd_mod
= (&_Py_NoneStruct); } else { simd_mod = simd_create_module_FMA3__AVX2
(); if (simd_mod == ((void*)0)) { goto err; } } const char *target_name
= "FMA3__AVX2"; if (PyDict_SetItemString(targets, target_name
, simd_mod) < 0) { _Py_DECREF(((PyObject*)(simd_mod))); goto
err; } _Py_INCREF(((PyObject*)(simd_mod))); if (PyModule_AddObject
(m, target_name, simd_mod) < 0) { _Py_DECREF(((PyObject*)(
simd_mod))); goto err; } } { PyObject *simd_mod; if (!(npy_cpu_have
(NPY_CPU_FEATURE_SSE)&&npy_cpu_have(NPY_CPU_FEATURE_SSE2
)&&npy_cpu_have(NPY_CPU_FEATURE_SSE3)&&npy_cpu_have
(NPY_CPU_FEATURE_SSSE3)&&npy_cpu_have(NPY_CPU_FEATURE_SSE41
)&&npy_cpu_have(NPY_CPU_FEATURE_POPCNT)&&npy_cpu_have
(NPY_CPU_FEATURE_SSE42))) { _Py_INCREF(((PyObject*)((&_Py_NoneStruct
)))); simd_mod = (&_Py_NoneStruct); } else { simd_mod = simd_create_module_SSE42
(); if (simd_mod == ((void*)0)) { goto err; } } const char *target_name
= "SSE42"; if (PyDict_SetItemString(targets, target_name, simd_mod
) < 0) { _Py_DECREF(((PyObject*)(simd_mod))); goto err; } _Py_INCREF
(((PyObject*)(simd_mod))); if (PyModule_AddObject(m, target_name
, simd_mod) < 0) { _Py_DECREF(((PyObject*)(simd_mod))); goto
err; } }
15
Assuming the condition is false
16
Taking false branch
17
Assuming 'simd_mod' is not equal to null
18
Taking false branch
19
Calling function 'PyDict_SetItemString' with a PyObject argument whose ownership has been released (with stolen reference)
68 NPY__CPU_DISPATCH_BASELINE_CALL(ATTACH_BASELINE_MODULE, MAKE_MSVC_HAPPY){ PyObject *simd_mod = simd_create_module(); if (simd_mod == (
(void*)0)) { goto err; } if (PyDict_SetItemString(targets, "baseline"
, simd_mod) < 0) { _Py_DECREF(((PyObject*)(simd_mod))); goto
err; } _Py_INCREF(((PyObject*)(simd_mod))); if (PyModule_AddObject
(m, "baseline", simd_mod) < 0) { _Py_DECREF(((PyObject*)(simd_mod
))); goto err; } }
69 return m;
70err:
71 Py_DECREF(m)_Py_DECREF(((PyObject*)(m)));
72 return NULL((void*)0);
73}

/opt/pyrefcon/lib/pyrefcon/models/models/PyDict_New.model

1#ifndef PyDict_New
2struct _object;
3typedef struct _object PyObject;
4PyObject* clang_analyzer_PyObject_New_Reference();
5PyObject* PyDict_New() {
6 return clang_analyzer_PyObject_New_Reference();
5
Setting reference count to 1
7}
8#else
9#warning "API PyDict_New is defined as a macro."
10#endif

/opt/pyrefcon/lib/pyrefcon/models/models/PyModule_AddObject.model

1#ifndef PyModule_AddObject
2struct _object;
3typedef struct _object PyObject;
4void clang_analyzer_PyObject_Steal_Reference(const void *);
5int clang_analyzer_noimpl_conjure_int();
6int PyModule_AddObject(PyObject *module, const char *name, PyObject *value) {
7 int ret = clang_analyzer_noimpl_conjure_int();
8 if (ret >= 0)
10
Assuming 'ret' is >= 0
11
Taking true branch
9 clang_analyzer_PyObject_Steal_Reference(value);
12
Setting reference count to 0
10 return ret;
11}
12#else
13#warning "API PyModule_AddObject is defined as a macro."
14#endif