From 47cf7a4ba54edf7c2a78503d7cca8a003f194d32 Mon Sep 17 00:00:00 2001 From: wren romano <2998727+wrengr@users.noreply.github.com> Date: Fri, 7 Jul 2023 12:46:32 -0700 Subject: [PATCH] [llvm] Allow SMLoc to be used in constexpr context Since `StringRef::empty` can be used in constexpr context, it seems reasonable that `SMLoc::isValid` should be too. The default-ctor and `operator==` are made constexpr for consistency. In particular, the `constexpr` keyword is needed for silencing warnings on Windows (whereas Linux allows constexpr usage without the keyword). Reviewed By: jpienaar Differential Revision: https://reviews.llvm.org/D154741 --- llvm/include/llvm/Support/SMLoc.h | 10 +++++----- mlir/lib/Dialect/SparseTensor/IR/Detail/Var.h | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/llvm/include/llvm/Support/SMLoc.h b/llvm/include/llvm/Support/SMLoc.h index 60b052a..d7dde81 100644 --- a/llvm/include/llvm/Support/SMLoc.h +++ b/llvm/include/llvm/Support/SMLoc.h @@ -24,14 +24,14 @@ class SMLoc { const char *Ptr = nullptr; public: - SMLoc() = default; + constexpr SMLoc() = default; - bool isValid() const { return Ptr != nullptr; } + constexpr bool isValid() const { return Ptr != nullptr; } - bool operator==(const SMLoc &RHS) const { return RHS.Ptr == Ptr; } - bool operator!=(const SMLoc &RHS) const { return RHS.Ptr != Ptr; } + constexpr bool operator==(const SMLoc &RHS) const { return RHS.Ptr == Ptr; } + constexpr bool operator!=(const SMLoc &RHS) const { return RHS.Ptr != Ptr; } - const char *getPointer() const { return Ptr; } + constexpr const char *getPointer() const { return Ptr; } static SMLoc getFromPointer(const char *Ptr) { SMLoc L; diff --git a/mlir/lib/Dialect/SparseTensor/IR/Detail/Var.h b/mlir/lib/Dialect/SparseTensor/IR/Detail/Var.h index 24dd631..f381d46 100644 --- a/mlir/lib/Dialect/SparseTensor/IR/Detail/Var.h +++ b/mlir/lib/Dialect/SparseTensor/IR/Detail/Var.h @@ -361,9 +361,9 @@ public: std::optional n = {}) : name(name), loc(loc), id(id), num(n), kind(vk) { assert(!name.empty() && "null StringRef"); + assert(loc.isValid() && "null SMLoc"); assert(isWF(vk) && "unknown VarKind"); assert((!n || Var::isWF_Num(*n)) && "Var::Num is too large"); - // NOTE TO Wren: windows did not like loc.isValid constexpr } constexpr StringRef getName() const { return name; } -- 2.7.4