The fix for PR libstdc++/82481 should only have applied for targets
where _GLIBCXX_HAVE_TLS is defined. Because it was also done for non-TLS
targets, it isn't possible to use clang's analyzers on non-TLS targets
if the code uses <mutex>. This fixes it by using a NOLINT comment on
the relevant line instead of testing #ifdef __clang_analyzer__ and
compiling different code when analyzing.
I'm not actually able to reproduce the analyzer warning with the tools
from Clang 10.0.1 so I'm not going to try to make the suppression more
specific with NOLINTNEXTLINE(clang-analyzer-code.StackAddressEscape).
libstdc++-v3/ChangeLog:
PR libstdc++/98605
* include/std/mutex (call_once): Use NOLINT to suppress clang
analyzer warnings.
std::forward<_Args>(__args)...);
};
#ifdef _GLIBCXX_HAVE_TLS
- __once_callable = std::__addressof(__callable);
+ __once_callable = std::__addressof(__callable); // NOLINT: PR 82481
__once_call = []{ (*(decltype(__callable)*)__once_callable)(); };
#else
unique_lock<mutex> __functor_lock(__get_once_mutex());
__set_once_functor_lock_ptr(0);
#endif
-#ifdef __clang_analyzer__
- // PR libstdc++/82481
- __once_callable = nullptr;
- __once_call = nullptr;
-#endif
-
if (__e)
__throw_system_error(__e);
}