[llvm] [ADT] Add noexcept to SmallVector accessor methods (PR #178605)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Jan 28 22:54:23 PST 2026
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-llvm-adt
Author: puneeth_aditya_5656 (mugiwaraluffy56)
<details>
<summary>Changes</summary>
## Summary
- Add `noexcept` specifier to SmallVector's basic accessor methods
- Methods affected: `size()`, `capacity()`, `empty()`, `begin()`, `end()`, `rbegin()`, `rend()`, `data()`
- These methods only perform pointer arithmetic and cannot throw
## Motivation
- Enables better optimization in generic code
- Improves move semantics when SmallVector is used in containers
- Aligns with standard library conventions (std::vector accessors are noexcept)
## Test plan
- [ ] Existing SmallVector unit tests pass
- [ ] LLVM builds successfully
---
Full diff: https://github.com/llvm/llvm-project/pull/178605.diff
1 Files Affected:
- (modified) llvm/include/llvm/ADT/SmallVector.h (+13-13)
``````````diff
diff --git a/llvm/include/llvm/ADT/SmallVector.h b/llvm/include/llvm/ADT/SmallVector.h
index 23d40c3e07675..96ad3aadd7070 100644
--- a/llvm/include/llvm/ADT/SmallVector.h
+++ b/llvm/include/llvm/ADT/SmallVector.h
@@ -77,10 +77,10 @@ template <class Size_T> class SmallVectorBase {
LLVM_ABI void grow_pod(void *FirstEl, size_t MinSize, size_t TSize);
public:
- size_t size() const { return Size; }
- size_t capacity() const { return Capacity; }
+ size_t size() const noexcept { return Size; }
+ size_t capacity() const noexcept { return Capacity; }
- [[nodiscard]] bool empty() const { return !Size; }
+ [[nodiscard]] bool empty() const noexcept { return !Size; }
protected:
/// Set the array size to \p N, which the current array must have enough
@@ -270,16 +270,16 @@ class SmallVectorTemplateCommon
using Base::size;
// forward iterator creation methods.
- iterator begin() { return (iterator)this->BeginX; }
- const_iterator begin() const { return (const_iterator)this->BeginX; }
- iterator end() { return begin() + size(); }
- const_iterator end() const { return begin() + size(); }
+ iterator begin() noexcept { return (iterator)this->BeginX; }
+ const_iterator begin() const noexcept { return (const_iterator)this->BeginX; }
+ iterator end() noexcept { return begin() + size(); }
+ const_iterator end() const noexcept { return begin() + size(); }
// reverse iterator creation methods.
- reverse_iterator rbegin() { return reverse_iterator(end()); }
- const_reverse_iterator rbegin() const{ return const_reverse_iterator(end()); }
- reverse_iterator rend() { return reverse_iterator(begin()); }
- const_reverse_iterator rend() const { return const_reverse_iterator(begin());}
+ reverse_iterator rbegin() noexcept { return reverse_iterator(end()); }
+ const_reverse_iterator rbegin() const noexcept { return const_reverse_iterator(end()); }
+ reverse_iterator rend() noexcept { return reverse_iterator(begin()); }
+ const_reverse_iterator rend() const noexcept { return const_reverse_iterator(begin()); }
size_type size_in_bytes() const { return size() * sizeof(T); }
size_type max_size() const {
@@ -289,9 +289,9 @@ class SmallVectorTemplateCommon
size_t capacity_in_bytes() const { return capacity() * sizeof(T); }
/// Return a pointer to the vector's buffer, even if empty().
- pointer data() { return pointer(begin()); }
+ pointer data() noexcept { return pointer(begin()); }
/// Return a pointer to the vector's buffer, even if empty().
- const_pointer data() const { return const_pointer(begin()); }
+ const_pointer data() const noexcept { return const_pointer(begin()); }
reference operator[](size_type idx) {
assert(idx < size());
``````````
</details>
https://github.com/llvm/llvm-project/pull/178605
More information about the llvm-commits
mailing list