microsoft / microsoft/mimalloc
mimalloc-override.h does not work correctly with namespaces
Nobody has claimed this yet.
- Dominant language
- C
- Stars
- 13.4k
- Forks
- 1.2k
- Avg merge
- 4d 45m
- Merged PRs (30d)
- 13
Description
Hello! Recently, I decided to build a project with Clang using mimalloc. I opted for overriding through header files, as I believe this is the most reliable and controllable way to override calls. The flags are quite simple for this:
```
C*FLAGS="-include mimalloc-override.h"
LDFLAGS="-lmimalloc"
```
However, Clang failed to compile with errors
```
/usr/lib/llvm/21/include/llvm/Support/MemAlloc.h:53:18: error: no member named 'mi_realloc' in namespace 'std'; did you mean simply 'mi_realloc'?
53 | void *Result = std::realloc(Ptr, Sz);
| ^ ~~~~~~~~~~~~~~~~
/usr/include/mimalloc.h:111:40: note: 'mi_realloc' declared here
```
It seems that the method of overriding using `#define` does not account for calls that may use namespaces (or their aliases). For now, one option I see is to add definitions of `mi_realloc` into the `std` namespace, creating something like this:
**mimalloc-override.h**
```cpp
#include
#define malloc(n) mi_malloc(n)
#if defined(__cplusplus)
namespace std {
inline auto mi_malloc(size_t n) { return ::mi_malloc(n); }
}
#endif
```
**out.cpp**
```cpp
#include "mimalloc-override.h"
#include
int main() {
auto _ = std::malloc(8);
}
```
**preprocessed_out.cpp**
```cpp
# 2 "./mimalloc-override.h" 2
namespace std {
inline auto mi_malloc(size_t n) { return ::mi_malloc(n); }
}
# 2 "out.cpp" 2
int main() {
auto _ = std::mi_malloc(8);
}
```
Thank you for your time and for the great project! :)
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with mimalloc-override.h and reproduce the failure using the -include mimalloc-override.h and -lmimalloc flags, then inspect the namespace-qualified calls shown from llvm/Support/MemAlloc.h. Verify the override behavior for std::malloc and std::realloc, and add coverage demonstrating that the affected Clang compilation succeeds.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- c, cpp
- Domain
- tooling
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100