[libcxx] Consolidate new/delete replacement in tests and disable it when using sanitizers.
Summary: MSAN and ASAN also replace new/delete which leads to a link error in these tests. Currently they are unsupported but I think it would be useful if these tests could run with sanitizers. This patch creates a support header that consolidates the new/delete replacement functionality and checking. When we are using sanitizers new and delete are no longer replaced and the checks always return true. Reviewers: mclow.lists, danalbert, jroelofs, EricWF Reviewed By: EricWF Subscribers: cfe-commits Differential Revision: http://reviews.llvm.org/D6562 git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@224741 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -17,43 +17,26 @@
|
||||
// // unspecified
|
||||
// };
|
||||
|
||||
// UNSUPPORTED: asan, msan
|
||||
|
||||
// Not a portable test
|
||||
|
||||
#include <codecvt>
|
||||
#include <cstdlib>
|
||||
#include <cassert>
|
||||
|
||||
int outstanding_news = 0;
|
||||
|
||||
void* operator new(std::size_t s) throw(std::bad_alloc)
|
||||
{
|
||||
++outstanding_news;
|
||||
return std::malloc(s);
|
||||
}
|
||||
|
||||
void operator delete(void* p) throw()
|
||||
{
|
||||
if (p)
|
||||
{
|
||||
--outstanding_news;
|
||||
std::free(p);
|
||||
}
|
||||
}
|
||||
#include "count_new.hpp"
|
||||
|
||||
int main()
|
||||
{
|
||||
assert(outstanding_news == 0);
|
||||
assert(globalMemCounter.checkOutstandingNewEq(0));
|
||||
{
|
||||
typedef std::codecvt_utf8<wchar_t> C;
|
||||
C c;
|
||||
assert(outstanding_news == 0);
|
||||
assert(globalMemCounter.checkOutstandingNewEq(0));
|
||||
}
|
||||
{
|
||||
typedef std::codecvt_utf8<wchar_t> C;
|
||||
std::locale loc(std::locale::classic(), new C);
|
||||
assert(outstanding_news != 0);
|
||||
assert(globalMemCounter.checkOutstandingNewNotEq(0));
|
||||
}
|
||||
assert(outstanding_news == 0);
|
||||
assert(globalMemCounter.checkOutstandingNewEq(0));
|
||||
}
|
||||
|
Reference in New Issue
Block a user