Skip to content

Commit 6dd3fd7

Browse files
[libc] Added missing operator deletes generated by gcc/clang
This patch adds two operator delete functions that are being generated by clang 15 on rv32 (operator delete(void *mem, std::align_val_t)) and by gcc 13 on intel 64 (operator delete(void *mem, unsigned long)).
1 parent 4f77677 commit 6dd3fd7

File tree

1 file changed

+14
-1
lines changed

1 file changed

+14
-1
lines changed

libc/test/UnitTest/HermeticTestUtils.cpp

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ unsigned long __getauxval(unsigned long id) {
123123

124124
} // extern "C"
125125

126-
void *operator new(unsigned long size, void *ptr) { return ptr; }
126+
void *operator new(size_t size, void *ptr) { return ptr; }
127127

128128
void *operator new(size_t size) { return malloc(size); }
129129

@@ -136,3 +136,16 @@ void operator delete(void *) {
136136
}
137137

138138
void operator delete(void *ptr, size_t size) { __builtin_trap(); }
139+
140+
// Defining members in the std namespace is not preferred. But, we do it here
141+
// so that we can use it to define the operator new which takes std::align_val_t
142+
// argument.
143+
namespace std {
144+
enum class align_val_t : size_t {};
145+
} // namespace std
146+
147+
void operator delete(void *mem, std::align_val_t) noexcept { __builtin_trap(); }
148+
149+
void operator delete(void *mem, unsigned int, std::align_val_t) noexcept {
150+
__builtin_trap();
151+
}

0 commit comments

Comments
 (0)