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.

Reply via email to