Skip to content

Commit

Permalink
chore: revert "perf: use C23's free_sized when available" (#6841)
Browse files Browse the repository at this point in the history
Reverts leanprover/lean4#6598, which broke Windows CI
  • Loading branch information
Kha authored Jan 29, 2025
1 parent bc234f9 commit a35bf7e
Show file tree
Hide file tree
Showing 5 changed files with 5 additions and 20 deletions.
7 changes: 1 addition & 6 deletions src/include/lean/lean.h
Original file line number Diff line number Diff line change
Expand Up @@ -380,16 +380,11 @@ static inline unsigned lean_small_object_size(lean_object * o) {
void free(void *); // avoid including big `stdlib.h`
#endif

#if !defined(__STDC_VERSION_STDLIB_H__) || __STDC_VERSION_STDLIB_H__ < 202311L
void free_sized(void* ptr, size_t);
#endif

static inline void lean_free_small_object(lean_object * o) {
#ifdef LEAN_SMALL_ALLOCATOR
lean_free_small(o);
#else
size_t* ptr = (size_t*)o - 1;
free_sized(ptr, *ptr + sizeof(size_t));
free((size_t*)o - 1);
#endif
}

Expand Down
2 changes: 1 addition & 1 deletion src/library/module.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,7 @@ extern "C" LEAN_EXPORT object * lean_read_module_data(object * fname, object *)
#endif
buffer = static_cast<char *>(malloc(size - sizeof(olean_header)));
free_data = [=]() {
free_sized(buffer, size - sizeof(olean_header));
free(buffer);
};
in.read(buffer, size - sizeof(olean_header));
if (!in) {
Expand Down
2 changes: 1 addition & 1 deletion src/runtime/alloc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -437,7 +437,7 @@ void dealloc(void * o, size_t sz) {
LEAN_RUNTIME_STAT_CODE(g_num_dealloc++);
sz = lean_align(sz, LEAN_OBJECT_SIZE_DELTA);
if (LEAN_UNLIKELY(sz > LEAN_MAX_SMALL_OBJECT_SIZE)) {
return free_sized(o, sz);
return free(o);
}
dealloc_small_core(o);
}
Expand Down
6 changes: 1 addition & 5 deletions src/runtime/buffer.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,7 @@ class buffer {

void free_memory() {
if (m_buffer != reinterpret_cast<T*>(m_initial_buffer))
#if __cpp_sized_deallocation >= 201309L
operator delete[](reinterpret_cast<char*>(m_buffer), sizeof(T) * m_capacity);
#else
delete[] reinterpret_cast<char*>(m_buffer);
#endif
delete[] reinterpret_cast<char*>(m_buffer);
}

void set_capacity(size_t new_capacity) {
Expand Down
8 changes: 1 addition & 7 deletions src/runtime/object.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,12 +41,6 @@ Author: Leonardo de Moura
#define isinf(x) std::isinf(x)
#endif

#if !defined(__STDC_VERSION_STDLIB_H__) || __STDC_VERSION_STDLIB_H__ < 202311L
extern "C" __attribute__((weak)) void free_sized(void *ptr, size_t) {
free(ptr);
}
#endif

// see `Task.Priority.max`
#define LEAN_MAX_PRIO 8

Expand Down Expand Up @@ -204,7 +198,7 @@ static inline void lean_dealloc(lean_object * o, size_t sz) {
#ifdef LEAN_SMALL_ALLOCATOR
dealloc(o, sz);
#else
free_sized(o, sz);
free(o);
#endif
}

Expand Down

0 comments on commit a35bf7e

Please sign in to comment.