https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121928
Bug ID: 121928
Summary: FAIL:
g++.dg/analyzer/fanalyzer-show-events-in-system-header
s-no.C
Product: gcc
Version: 15.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: analyzer
Assignee: dmalcolm at gcc dot gnu.org
Reporter: redi at gcc dot gnu.org
Target Milestone: ---
r16-3810-g6456da6bab8a2c43e7899afda991589065d96595 for Bug 121148 caused a
number of new FAILs in the analyzer:
FAIL: g++.dg/analyzer/fanalyzer-show-events-in-system-headers-no.C -std=c++14
at line 13 (test for warnings, line 12)
FAIL: g++.dg/analyzer/fanalyzer-show-events-in-system-headers-no.C -std=c++14
at line 18 (test for warnings, line 11)
FAIL: g++.dg/analyzer/fanalyzer-show-events-in-system-headers-no.C -std=c++14
at line 19 (test for warnings, line 12)
FAIL: g++.dg/analyzer/fanalyzer-show-events-in-system-headers-no.C -std=c++14
at line 20 (test for warnings, line 12)
FAIL: g++.dg/analyzer/fanalyzer-show-events-in-system-headers-no.C -std=c++14
at line 21 (test for warnings, line 12)
FAIL: g++.dg/analyzer/fanalyzer-show-events-in-system-headers-no.C -std=c++17
at line 13 (test for warnings, line 12)
FAIL: g++.dg/analyzer/fanalyzer-show-events-in-system-headers-no.C -std=c++17
at line 19 (test for warnings, line 12)
FAIL: g++.dg/analyzer/fanalyzer-show-events-in-system-headers-no.C -std=c++17
at line 20 (test for warnings, line 12)
FAIL: g++.dg/analyzer/fanalyzer-show-events-in-system-headers-no.C -std=c++17
at line 21 (test for warnings, line 12)
(and more)
But it seems like latent bug in -fanalyzer-call-summaries
This change to current trunk allows you to test before and after the change:
-- a/libstdc++-v3/include/ext/atomicity.h
+++ b/libstdc++-v3/include/ext/atomicity.h
@@ -94,6 +94,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__attribute__((__always_inline__))
__exchange_and_add_single(_Atomic_word* __mem, int __val)
{
+#ifdef OLD_CODE
+ _Atomic_word __result = *__mem;
+ *__mem += __val;
+#else
_Atomic_word __result = *__mem;
// Do the addition with an unsigned type so that overflow is well defined.
#if __cplusplus >= 201103L
@@ -107,6 +111,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__u = __result;
__u += __val;
*__mem = __u;
+#endif
return __result;
}
Running the tests with:
RUNTESTFLAGS="analyzer.exp=*system-headers* --target_board=unix/-DOLD_CODE"
"fixes" the tests, and without -DOLD_CODE you get the FAILs.