mirror of https://github.com/roytam1/UXP
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
28 lines
927 B
28 lines
927 B
#define MOZ_NONHEAP_CLASS __attribute__((annotate("moz_nonheap_class"))) |
|
#define MOZ_HEAP_ALLOCATOR \ |
|
_Pragma("GCC diagnostic push") \ |
|
_Pragma("GCC diagnostic ignored \"-Wgcc-compat\"") \ |
|
__attribute__((annotate("moz_heap_allocator"))) \ |
|
_Pragma("GCC diagnostic pop") |
|
|
|
#include <stdlib.h> |
|
#include <memory> |
|
|
|
struct MOZ_NONHEAP_CLASS X { |
|
}; |
|
|
|
void *operator new(size_t x, int qual) MOZ_HEAP_ALLOCATOR { |
|
return ::operator new(x); |
|
} |
|
|
|
template <typename T> |
|
T *customAlloc() MOZ_HEAP_ALLOCATOR { |
|
T *arg = static_cast<T*>(malloc(sizeof(T))); |
|
return new (arg) T(); |
|
} |
|
|
|
template <typename T> |
|
void misuseX(T q) { |
|
X *foo = customAlloc<X>(); // expected-error {{variable of type 'X' is not valid on the heap}} expected-note {{value incorrectly allocated on the heap}} |
|
X *foo2 = new (100) X(); // expected-error {{variable of type 'X' is not valid on the heap}} expected-note {{value incorrectly allocated on the heap}} |
|
}
|
|
|