================
@@ -0,0 +1,190 @@
+// RUN: %clang_analyze_cc1
-analyzer-checker=alpha.webkit.UncountedCallArgsChecker,alpha.webkit.UncountedLocalVarsChecker,alpha.webkit.UncheckedCallArgsChecker,alpha.webkit.UncheckedLocalVarsChecker
-verify %s
+
+#include "mock-types.h"
+
+namespace WTF {
+
+template <typename T> class NeverDestroyed {
+public:
+ template <typename... Args> NeverDestroyed(Args&&...);
+ operator T&() { return *storagePointer(); }
+ T& get() { return *storagePointer(); }
+ T* operator->() { return storagePointer(); }
+ operator const T&() const { return *storagePointer(); }
+ const T& get() const { return *storagePointer(); }
+ const T* operator->() const { return storagePointer(); }
+
+private:
+ T* storagePointer() const { return
reinterpret_cast<T*>(const_cast<char*>(m_storage)); }
----------------
steakhal wrote:
I thought the reinterpret-cast is not enough for acquiring a valid pointer to
type-punned storage.
I figured that's why C++ has `std::launder`.
https://en.cppreference.com/cpp/utility/launder
https://github.com/llvm/llvm-project/pull/234867
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits