[clang] [StaticAnalyzer] Make it a noop when initializing a field of empty record (PR #138594)
Balazs Benics via cfe-commits
cfe-commits at lists.llvm.org
Tue May 6 05:05:16 PDT 2025
================
@@ -0,0 +1,45 @@
+// RUN: %clang_analyze_cc1 -analyzer-checker=cplusplus -verify %s
+// RUN: %clang_analyze_cc1 -analyzer-checker=cplusplus -verify %s -DEMPTY_CLASS
+
+// expected-no-diagnostics
+
+// This test reproduces the issue that previously the static analyzer
+// initialized an [[__no_unique_address__]] empty field to zero,
+// over-writing a non-empty field with the same offset.
+
+namespace std {
+#ifdef EMPTY_CLASS
+
+ template <typename T>
+ class default_delete {
+ T dump();
+ static T x;
+ };
+ template <class _Tp, class _Dp = default_delete<_Tp> >
+#else
+
+ struct default_delete {};
+ template <class _Tp, class _Dp = default_delete >
+#endif
----------------
steakhal wrote:
I'm a bit confused that if `EMPTY_CLASS` is defined, actually that is the case when the `class default_delete` has a static data member - unlike in the other branch where it's indeed empty.
Shouldn't these be swapped? On the same note, shouldn't we call this macro `EMPTY_DEFAULT_DELETE` instead to be specific which class it refers to?
https://github.com/llvm/llvm-project/pull/138594
More information about the cfe-commits
mailing list