[llvm] Fix -Wunused-template in assorted LLVM library helpers (NFC) (PR #202988)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Jun 10 07:11:40 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-llvm-mc
@llvm/pr-subscribers-pgo
Author: Aditya Medhane (flash1729)
<details>
<summary>Changes</summary>
Function templates across a few low-level LLVM libraries trip `-Wunused-template`. Two kinds of fix here:
- Header templates with internal linkage. `CheckedArithmetic.h`: move `checkedOp` out of the anonymous namespace into `llvm::detail` and update its callers. `BitcodeConvenience.h`: drop `static` on `emitOps`. `MCDCTypes.h`: drop `static` on `getParams`. Templates are implicitly inline, so this is a linkage-only change.
- Dead code with no callers, removed: `makeNode` in `ItaniumManglingCanonicalizer.cpp` (a base-class helper shadowed by the derived class), `addDirectiveHandler` in `GOFFAsmParser.cpp`, and `getWithDefault` in `ResourceFileWriter.cpp`.
NFC.
Part of #<!-- -->202945.
---
Full diff: https://github.com/llvm/llvm-project/pull/202988.diff
6 Files Affected:
- (modified) llvm/include/llvm/Bitcode/BitcodeConvenience.h (+2-2)
- (modified) llvm/include/llvm/ProfileData/Coverage/MCDCTypes.h (+1-1)
- (modified) llvm/include/llvm/Support/CheckedArithmetic.h (+9-7)
- (modified) llvm/lib/MC/MCParser/GOFFAsmParser.cpp (-8)
- (modified) llvm/lib/ProfileData/ItaniumManglingCanonicalizer.cpp (-5)
- (modified) llvm/tools/llvm-rc/ResourceFileWriter.cpp (-9)
``````````diff
diff --git a/llvm/include/llvm/Bitcode/BitcodeConvenience.h b/llvm/include/llvm/Bitcode/BitcodeConvenience.h
index 8e3ac064bcf29..17cdfdccffdd2 100644
--- a/llvm/include/llvm/Bitcode/BitcodeConvenience.h
+++ b/llvm/include/llvm/Bitcode/BitcodeConvenience.h
@@ -163,7 +163,7 @@ namespace detail {
/// This is the base case for \c emitOps.
///
/// \sa BCRecordLayout::emitAbbrev
-template <typename FieldTy> static void emitOps(llvm::BitCodeAbbrev &abbrev) {
+template <typename FieldTy> void emitOps(llvm::BitCodeAbbrev &abbrev) {
FieldTy::emitOp(abbrev);
}
@@ -173,7 +173,7 @@ template <typename FieldTy> static void emitOps(llvm::BitCodeAbbrev &abbrev) {
///
/// \sa BCRecordLayout::emitAbbrev
template <typename FieldTy, typename Next, typename... Rest>
-static void emitOps(llvm::BitCodeAbbrev &abbrev) {
+void emitOps(llvm::BitCodeAbbrev &abbrev) {
static_assert(!FieldTy::IsCompound,
"arrays and blobs may not appear in the middle of a record");
FieldTy::emitOp(abbrev);
diff --git a/llvm/include/llvm/ProfileData/Coverage/MCDCTypes.h b/llvm/include/llvm/ProfileData/Coverage/MCDCTypes.h
index fea1e0bc04d26..2097afe9de2f0 100644
--- a/llvm/include/llvm/ProfileData/Coverage/MCDCTypes.h
+++ b/llvm/include/llvm/ProfileData/Coverage/MCDCTypes.h
@@ -61,7 +61,7 @@ using Parameters =
/// \tparam MaybeConstMCDCParameters Expected inferred. May be const.
/// \param MCDCParams May be const.
template <class MaybeConstInnerParameters, class MaybeConstMCDCParameters>
-static auto &getParams(MaybeConstMCDCParameters &MCDCParams) {
+auto &getParams(MaybeConstMCDCParameters &MCDCParams) {
using InnerParameters =
typename std::remove_const<MaybeConstInnerParameters>::type;
MaybeConstInnerParameters *Params = std::get_if<InnerParameters>(&MCDCParams);
diff --git a/llvm/include/llvm/Support/CheckedArithmetic.h b/llvm/include/llvm/Support/CheckedArithmetic.h
index 69dcdc74e0153..ef5ea7a9d148f 100644
--- a/llvm/include/llvm/Support/CheckedArithmetic.h
+++ b/llvm/include/llvm/Support/CheckedArithmetic.h
@@ -19,7 +19,8 @@
#include <optional>
#include <type_traits>
-namespace {
+namespace llvm {
+namespace detail {
/// Utility function to apply a given method of \c APInt \p F to \p LHS and
/// \p RHS.
@@ -35,7 +36,8 @@ checkedOp(T LHS, T RHS, F Op, bool Signed = true) {
return std::nullopt;
return Signed ? Out.getSExtValue() : Out.getZExtValue();
}
-}
+} // namespace detail
+} // namespace llvm
namespace llvm {
@@ -45,7 +47,7 @@ namespace llvm {
template <typename T>
std::enable_if_t<std::is_signed_v<T>, std::optional<T>> checkedAdd(T LHS,
T RHS) {
- return checkedOp(LHS, RHS, &llvm::APInt::sadd_ov);
+ return detail::checkedOp(LHS, RHS, &llvm::APInt::sadd_ov);
}
/// Subtract two signed integers \p LHS and \p RHS.
@@ -54,7 +56,7 @@ std::enable_if_t<std::is_signed_v<T>, std::optional<T>> checkedAdd(T LHS,
template <typename T>
std::enable_if_t<std::is_signed_v<T>, std::optional<T>> checkedSub(T LHS,
T RHS) {
- return checkedOp(LHS, RHS, &llvm::APInt::ssub_ov);
+ return detail::checkedOp(LHS, RHS, &llvm::APInt::ssub_ov);
}
/// Multiply two signed integers \p LHS and \p RHS.
@@ -63,7 +65,7 @@ std::enable_if_t<std::is_signed_v<T>, std::optional<T>> checkedSub(T LHS,
template <typename T>
std::enable_if_t<std::is_signed_v<T>, std::optional<T>> checkedMul(T LHS,
T RHS) {
- return checkedOp(LHS, RHS, &llvm::APInt::smul_ov);
+ return detail::checkedOp(LHS, RHS, &llvm::APInt::smul_ov);
}
/// Multiply A and B, and add C to the resulting product.
@@ -83,7 +85,7 @@ std::enable_if_t<std::is_signed_v<T>, std::optional<T>> checkedMulAdd(T A, T B,
template <typename T>
std::enable_if_t<std::is_unsigned_v<T>, std::optional<T>>
checkedAddUnsigned(T LHS, T RHS) {
- return checkedOp(LHS, RHS, &llvm::APInt::uadd_ov, /*Signed=*/false);
+ return detail::checkedOp(LHS, RHS, &llvm::APInt::uadd_ov, /*Signed=*/false);
}
/// Multiply two unsigned integers \p LHS and \p RHS.
@@ -92,7 +94,7 @@ checkedAddUnsigned(T LHS, T RHS) {
template <typename T>
std::enable_if_t<std::is_unsigned_v<T>, std::optional<T>>
checkedMulUnsigned(T LHS, T RHS) {
- return checkedOp(LHS, RHS, &llvm::APInt::umul_ov, /*Signed=*/false);
+ return detail::checkedOp(LHS, RHS, &llvm::APInt::umul_ov, /*Signed=*/false);
}
/// Multiply unsigned integers A and B, and add C to the resulting product.
diff --git a/llvm/lib/MC/MCParser/GOFFAsmParser.cpp b/llvm/lib/MC/MCParser/GOFFAsmParser.cpp
index 1118d7396d522..de15275eb164b 100644
--- a/llvm/lib/MC/MCParser/GOFFAsmParser.cpp
+++ b/llvm/lib/MC/MCParser/GOFFAsmParser.cpp
@@ -13,14 +13,6 @@ using namespace llvm;
namespace {
class GOFFAsmParser : public MCAsmParserExtension {
- template <bool (GOFFAsmParser::*HandlerMethod)(StringRef, SMLoc)>
- void addDirectiveHandler(StringRef Directive) {
- MCAsmParser::ExtensionDirectiveHandler Handler =
- std::make_pair(this, HandleDirective<GOFFAsmParser, HandlerMethod>);
-
- getParser().addDirectiveHandler(Directive, Handler);
- }
-
public:
GOFFAsmParser() = default;
diff --git a/llvm/lib/ProfileData/ItaniumManglingCanonicalizer.cpp b/llvm/lib/ProfileData/ItaniumManglingCanonicalizer.cpp
index 6271b16226934..a1b1c7167e776 100644
--- a/llvm/lib/ProfileData/ItaniumManglingCanonicalizer.cpp
+++ b/llvm/lib/ProfileData/ItaniumManglingCanonicalizer.cpp
@@ -122,11 +122,6 @@ class FoldingNodeAllocator {
return {Result, true};
}
- template<typename T, typename... Args>
- Node *makeNode(Args &&...As) {
- return getOrCreateNode<T>(true, std::forward<Args>(As)...).first;
- }
-
void *allocateNodeArray(size_t sz) {
return RawAlloc.Allocate(sizeof(Node *) * sz, alignof(Node *));
}
diff --git a/llvm/tools/llvm-rc/ResourceFileWriter.cpp b/llvm/tools/llvm-rc/ResourceFileWriter.cpp
index 2c35c5ad365dc..0c3c4abc6606c 100644
--- a/llvm/tools/llvm-rc/ResourceFileWriter.cpp
+++ b/llvm/tools/llvm-rc/ResourceFileWriter.cpp
@@ -1492,15 +1492,6 @@ Error ResourceFileWriter::writeVersionInfoValue(const VersionInfoValue &Val) {
return Error::success();
}
-template <typename Ty>
-static Ty getWithDefault(const StringMap<Ty> &Map, StringRef Key,
- const Ty &Default) {
- auto Iter = Map.find(Key);
- if (Iter != Map.end())
- return Iter->getValue();
- return Default;
-}
-
Error ResourceFileWriter::writeVersionInfoBody(const RCResource *Base) {
auto *Res = cast<VersionInfoResource>(Base);
``````````
</details>
https://github.com/llvm/llvm-project/pull/202988
More information about the llvm-commits
mailing list