diff --git a/clang/unittests/Analysis/FlowSensitive/MockHeaders.cpp b/clang/unittests/Analysis/FlowSensitive/MockHeaders.cpp index 2e528edd7c1f9..76c7310e16a4f 100644 --- a/clang/unittests/Analysis/FlowSensitive/MockHeaders.cpp +++ b/clang/unittests/Analysis/FlowSensitive/MockHeaders.cpp @@ -2232,6 +2232,95 @@ using testing::AssertionResult; #endif // TESTING_DEFS_H )cc"; +constexpr const char StdUniquePtrHeader[] = R"cc( +namespace std { + + template + struct default_delete {}; + + template > + class unique_ptr { + public: + using element_type = T; + using deleter_type = D; + + constexpr unique_ptr(); + constexpr unique_ptr(nullptr_t) noexcept; + unique_ptr(unique_ptr&&); + explicit unique_ptr(T*); + template + unique_ptr(unique_ptr&&); + + ~unique_ptr(); + + unique_ptr& operator=(unique_ptr&&); + template + unique_ptr& operator=(unique_ptr&&); + unique_ptr& operator=(nullptr_t); + + void reset(T* = nullptr) noexcept; + T* release(); + T* get() const; + + T& operator*() const; + T* operator->() const; + explicit operator bool() const noexcept; + }; + + template + class unique_ptr { + public: + T* get() const; + T& operator[](size_t i); + const T& operator[](size_t i) const; + }; + + template + unique_ptr make_unique(Args&&...); + + template + void swap(unique_ptr& x, unique_ptr& y) noexcept; + + template + bool operator==(const unique_ptr& x, const unique_ptr& y); + template + bool operator!=(const unique_ptr& x, const unique_ptr& y); + template + bool operator<(const unique_ptr& x, const unique_ptr& y); + template + bool operator<=(const unique_ptr& x, const unique_ptr& y); + template + bool operator>(const unique_ptr& x, const unique_ptr& y); + template + bool operator>=(const unique_ptr& x, const unique_ptr& y); + + template + bool operator==(const unique_ptr& x, nullptr_t) noexcept; + template + bool operator==(nullptr_t, const unique_ptr& y) noexcept; + template + bool operator!=(const unique_ptr& x, nullptr_t) noexcept; + template + bool operator!=(nullptr_t, const unique_ptr& y) noexcept; + template + bool operator<(const unique_ptr& x, nullptr_t); + template + bool operator<(nullptr_t, const unique_ptr& y); + template + bool operator<=(const unique_ptr& x, nullptr_t); + template + bool operator<=(nullptr_t, const unique_ptr& y); + template + bool operator>(const unique_ptr& x, nullptr_t); + template + bool operator>(nullptr_t, const unique_ptr& y); + template + bool operator>=(const unique_ptr& x, nullptr_t); + template + bool operator>=(nullptr_t, const unique_ptr& y); +} +)cc"; + std::vector> getMockHeaders() { std::vector> Headers; Headers.emplace_back("cstddef.h", CStdDefHeader); @@ -2249,6 +2338,7 @@ std::vector> getMockHeaders() { Headers.emplace_back("statusor_defs.h", StatusOrDefsHeader); Headers.emplace_back("absl_log.h", AbslLogHeader); Headers.emplace_back("testing_defs.h", TestingDefsHeader); + Headers.emplace_back("std_unique_ptr.h", StdUniquePtrHeader); return Headers; }