Skip to content

Commit 1297c11

Browse files
authored
[mlir] Add [[lifetimebound]] to Range classes. (#123091)
This prevents creating range class instances from temporaries.
1 parent d049db8 commit 1297c11

File tree

4 files changed

+12
-9
lines changed

4 files changed

+12
-9
lines changed

mlir/include/mlir/IR/BlockSupport.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,9 +110,9 @@ class BlockRange final
110110
BlockRange(SuccessorRange successors);
111111
template <typename Arg, typename = std::enable_if_t<std::is_constructible<
112112
ArrayRef<Block *>, Arg>::value>>
113-
BlockRange(Arg &&arg)
113+
BlockRange(Arg &&arg LLVM_LIFETIME_BOUND)
114114
: BlockRange(ArrayRef<Block *>(std::forward<Arg>(arg))) {}
115-
BlockRange(std::initializer_list<Block *> blocks)
115+
BlockRange(std::initializer_list<Block *> blocks LLVM_LIFETIME_BOUND)
116116
: BlockRange(ArrayRef<Block *>(blocks)) {}
117117

118118
private:

mlir/include/mlir/IR/Region.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -357,12 +357,12 @@ class RegionRange
357357

358358
template <typename Arg, typename = std::enable_if_t<std::is_constructible<
359359
ArrayRef<std::unique_ptr<Region>>, Arg>::value>>
360-
RegionRange(Arg &&arg)
360+
RegionRange(Arg &&arg LLVM_LIFETIME_BOUND)
361361
: RegionRange(ArrayRef<std::unique_ptr<Region>>(std::forward<Arg>(arg))) {
362362
}
363363
template <typename Arg>
364364
RegionRange(
365-
Arg &&arg,
365+
Arg &&arg LLVM_LIFETIME_BOUND,
366366
std::enable_if_t<std::is_constructible<ArrayRef<Region *>, Arg>::value>
367367
* = nullptr)
368368
: RegionRange(ArrayRef<Region *>(std::forward<Arg>(arg))) {}

mlir/include/mlir/IR/TypeRange.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,9 @@ class TypeRange : public llvm::detail::indexed_accessor_range_base<
4646
values.end().getCurrent()))) {}
4747
template <typename Arg, typename = std::enable_if_t<std::is_constructible<
4848
ArrayRef<Type>, Arg>::value>>
49-
TypeRange(Arg &&arg) : TypeRange(ArrayRef<Type>(std::forward<Arg>(arg))) {}
50-
TypeRange(std::initializer_list<Type> types)
49+
TypeRange(Arg &&arg LLVM_LIFETIME_BOUND)
50+
: TypeRange(ArrayRef<Type>(std::forward<Arg>(arg))) {}
51+
TypeRange(std::initializer_list<Type> types LLVM_LIFETIME_BOUND)
5152
: TypeRange(ArrayRef<Type>(types)) {}
5253

5354
private:

mlir/include/mlir/IR/ValueRange.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -391,9 +391,11 @@ class ValueRange final
391391
typename = std::enable_if_t<
392392
std::is_constructible<ArrayRef<Value>, Arg>::value &&
393393
!std::is_convertible<Arg, Value>::value>>
394-
ValueRange(Arg &&arg) : ValueRange(ArrayRef<Value>(std::forward<Arg>(arg))) {}
395-
ValueRange(const Value &value) : ValueRange(&value, /*count=*/1) {}
396-
ValueRange(const std::initializer_list<Value> &values)
394+
ValueRange(Arg &&arg LLVM_LIFETIME_BOUND)
395+
: ValueRange(ArrayRef<Value>(std::forward<Arg>(arg))) {}
396+
ValueRange(const Value &value LLVM_LIFETIME_BOUND)
397+
: ValueRange(&value, /*count=*/1) {}
398+
ValueRange(const std::initializer_list<Value> &values LLVM_LIFETIME_BOUND)
397399
: ValueRange(ArrayRef<Value>(values)) {}
398400
ValueRange(iterator_range<OperandRange::iterator> values)
399401
: ValueRange(OperandRange(values)) {}

0 commit comments

Comments
 (0)