[all-commits] [llvm/llvm-project] ba0d50: [Support] Fix UB in BumpPtrAllocator when first al...
Sam McCall via All-commits
all-commits at lists.llvm.org
Thu May 5 23:57:52 PDT 2022
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: ba0d50ad7ec664bfc79f691bfd358d6a0d815505
https://github.com/llvm/llvm-project/commit/ba0d50ad7ec664bfc79f691bfd358d6a0d815505
Author: Sam McCall <sam.mccall at gmail.com>
Date: 2022-05-06 (Fri, 06 May 2022)
Changed paths:
M llvm/include/llvm/Support/Allocator.h
M llvm/unittests/Support/AllocatorTest.cpp
Log Message:
-----------
[Support] Fix UB in BumpPtrAllocator when first allocation is zero.
BumpPtrAllocator::Allocate() is marked __attribute__((returns_nonnull)) when the
compiler supports it, which makes it UB to return null.
When there have been no allocations yet, the current slab is [nullptr, nullptr).
A zero-sized allocation fits in this range, and so Allocate(0, 1) returns null.
There's no explicit docs whether Allocate(0) is valid. I think we have to assume
that it is:
- the implementation tries to support it (e.g. >= tests instead of >)
- malloc(0) is allowed
- requiring each callsite to do a check is bug-prone
- I found real LLVM code that makes zero-sized allocations
Differential Revision: https://reviews.llvm.org/D125040
More information about the All-commits
mailing list