From 50ac3b1912516b064a94d2414be295be79b09bc5 Mon Sep 17 00:00:00 2001 From: James Newling Date: Fri, 19 Jan 2024 19:12:29 -0800 Subject: [PATCH] g++ build fix (#2778) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Introduced in 704cfdaf0893fa4078ab744a915a56367282dcaa of @wu-s-john g++ compiler error: Pooling.cpp:177:13: error: explicit specialization in non-namespace scope ‘class Design looks good, g++ is just freaking out for no good reason. Un-nesting the template classes fixes the error. We don't have g++ CI. This hopefully happens infrequently enough that we can just fix manually. My service to those folks who really like building with g++... :) --- lib/Conversion/TorchToLinalg/Pooling.cpp | 36 ++++++++++++++---------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/lib/Conversion/TorchToLinalg/Pooling.cpp b/lib/Conversion/TorchToLinalg/Pooling.cpp index 85354aad4f12..14d2c71dbc92 100644 --- a/lib/Conversion/TorchToLinalg/Pooling.cpp +++ b/lib/Conversion/TorchToLinalg/Pooling.cpp @@ -72,7 +72,8 @@ checkAndGetPoolingParameters(OpTy op, ConversionPatternRewriter &rewriter, return success(); } -static Value computeOutputTensor(Operation *op, ConversionPatternRewriter &rewriter, +static Value +computeOutputTensor(Operation *op, ConversionPatternRewriter &rewriter, Value self, int64_t dimensionality, bool ceilMode, SmallVectorImpl &strideInts, SmallVectorImpl &paddingInts, @@ -167,24 +168,29 @@ static LogicalResult createPoolingOp( } namespace { + +template struct DimensionTraits {}; + +template <> struct DimensionTraits { + static constexpr int64_t Dim = 2; + // unused const variable warning suppression: + static_assert(Dim == Dim); +}; + +template <> struct DimensionTraits { + static constexpr int64_t Dim = 3; + // unused const variable warning suppression: + static_assert(Dim == Dim); +}; + template class ConvertAtenMaxPoolOp : public OpConversionPattern { using OpConversionPattern::OpConversionPattern; private: - template struct DimensionTraits; - - template <> struct DimensionTraits { - static const int64_t Dim = 2; - }; - - template <> struct DimensionTraits { - static const int64_t Dim = 3; - }; - static const int64_t Dim = DimensionTraits::Dim; - LogicalResult createPoolingMax3D(AtenMaxPool3dOp &op, + LogicalResult createPoolingMax3D(AtenMaxPool3dOp &op, typename OpTy::Adaptor adaptor, ConversionPatternRewriter &rewriter, SmallVectorImpl &kernelSizeIntValues, @@ -327,9 +333,9 @@ class ConvertAtenMaxPoolOp : public OpConversionPattern { rewriter.replaceOpWithNewOp(op, newResultType, maxPool2d); return success(); } else { - return createPoolingMax3D(op, adaptor, rewriter, - kernelSizeIntValues, strideInts, paddingInts, - dilationInts, ceilMode); + return createPoolingMax3D(op, adaptor, rewriter, kernelSizeIntValues, + strideInts, paddingInts, dilationInts, + ceilMode); } } };