[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