diff --git a/mlir/include/mlir/IR/BlockSupport.h b/mlir/include/mlir/IR/BlockSupport.h index ff508891ac2ff..292938e46c27e 100644 --- a/mlir/include/mlir/IR/BlockSupport.h +++ b/mlir/include/mlir/IR/BlockSupport.h @@ -110,9 +110,9 @@ class BlockRange final BlockRange(SuccessorRange successors); template , Arg>::value>> - BlockRange(Arg &&arg) + BlockRange(Arg &&arg LLVM_LIFETIME_BOUND) : BlockRange(ArrayRef(std::forward(arg))) {} - BlockRange(std::initializer_list blocks) + BlockRange(std::initializer_list blocks LLVM_LIFETIME_BOUND) : BlockRange(ArrayRef(blocks)) {} private: diff --git a/mlir/include/mlir/IR/Region.h b/mlir/include/mlir/IR/Region.h index 93fc9dbb430ee..22cb7037772dd 100644 --- a/mlir/include/mlir/IR/Region.h +++ b/mlir/include/mlir/IR/Region.h @@ -357,12 +357,12 @@ class RegionRange template >, Arg>::value>> - RegionRange(Arg &&arg) + RegionRange(Arg &&arg LLVM_LIFETIME_BOUND) : RegionRange(ArrayRef>(std::forward(arg))) { } template RegionRange( - Arg &&arg, + Arg &&arg LLVM_LIFETIME_BOUND, std::enable_if_t, Arg>::value> * = nullptr) : RegionRange(ArrayRef(std::forward(arg))) {} diff --git a/mlir/include/mlir/IR/TypeRange.h b/mlir/include/mlir/IR/TypeRange.h index 99fabab334f92..9c2fbb3884188 100644 --- a/mlir/include/mlir/IR/TypeRange.h +++ b/mlir/include/mlir/IR/TypeRange.h @@ -46,8 +46,9 @@ class TypeRange : public llvm::detail::indexed_accessor_range_base< values.end().getCurrent()))) {} template , Arg>::value>> - TypeRange(Arg &&arg) : TypeRange(ArrayRef(std::forward(arg))) {} - TypeRange(std::initializer_list types) + TypeRange(Arg &&arg LLVM_LIFETIME_BOUND) + : TypeRange(ArrayRef(std::forward(arg))) {} + TypeRange(std::initializer_list types LLVM_LIFETIME_BOUND) : TypeRange(ArrayRef(types)) {} private: diff --git a/mlir/include/mlir/IR/ValueRange.h b/mlir/include/mlir/IR/ValueRange.h index 4b421c08d8418..a807b77ad077f 100644 --- a/mlir/include/mlir/IR/ValueRange.h +++ b/mlir/include/mlir/IR/ValueRange.h @@ -391,9 +391,11 @@ class ValueRange final typename = std::enable_if_t< std::is_constructible, Arg>::value && !std::is_convertible::value>> - ValueRange(Arg &&arg) : ValueRange(ArrayRef(std::forward(arg))) {} - ValueRange(const Value &value) : ValueRange(&value, /*count=*/1) {} - ValueRange(const std::initializer_list &values) + ValueRange(Arg &&arg LLVM_LIFETIME_BOUND) + : ValueRange(ArrayRef(std::forward(arg))) {} + ValueRange(const Value &value LLVM_LIFETIME_BOUND) + : ValueRange(&value, /*count=*/1) {} + ValueRange(const std::initializer_list &values LLVM_LIFETIME_BOUND) : ValueRange(ArrayRef(values)) {} ValueRange(iterator_range values) : ValueRange(OperandRange(values)) {}