From c81f0d6df3da4b930dcc345eeb3bdeed1d7e7dce Mon Sep 17 00:00:00 2001 From: Wang Xu Date: Mon, 28 Aug 2023 16:49:25 -0700 Subject: [PATCH] Fix unsafe fallthrough in fbcode//glow:GraphOptimizer Reviewed By: jackm321, khabinov Differential Revision: D48746875 fbshipit-source-id: ab75cafeda0720182ebcd9f930af1e576551af5b --- lib/Graph/Node.cpp | 11 +++++++++++ .../GraphOptimizer/GraphOptimizer.cpp | 13 +++++++++++++ lib/Quantization/Quantization.cpp | 18 +++++++++--------- 3 files changed, 33 insertions(+), 9 deletions(-) diff --git a/lib/Graph/Node.cpp b/lib/Graph/Node.cpp index 5f5065e474..31dc3b2666 100644 --- a/lib/Graph/Node.cpp +++ b/lib/Graph/Node.cpp @@ -248,16 +248,27 @@ bool Node::isArithmetic() const { switch (getKind()) { ARITHMETIC_NODE_CASE(Add) + [[fallthrough]]; ARITHMETIC_NODE_CASE(Mul) + [[fallthrough]]; ARITHMETIC_NODE_CASE(Sub) + [[fallthrough]]; ARITHMETIC_NODE_CASE(Div) + [[fallthrough]]; ARITHMETIC_NODE_CASE(FloorDiv) + [[fallthrough]]; ARITHMETIC_NODE_CASE(Max) + [[fallthrough]]; ARITHMETIC_NODE_CASE(Min) + [[fallthrough]]; ARITHMETIC_NODE_CASE(CmpLTE) + [[fallthrough]]; ARITHMETIC_NODE_CASE(CmpLT) + [[fallthrough]]; ARITHMETIC_NODE_CASE(CmpEQ) + [[fallthrough]]; ARITHMETIC_NODE_CASE(Pow) + [[fallthrough]]; ARITHMETIC_NODE_CASE(Fmod) return true; default: diff --git a/lib/Optimizer/GraphOptimizer/GraphOptimizer.cpp b/lib/Optimizer/GraphOptimizer/GraphOptimizer.cpp index ec75c9decb..6e80bae630 100644 --- a/lib/Optimizer/GraphOptimizer/GraphOptimizer.cpp +++ b/lib/Optimizer/GraphOptimizer/GraphOptimizer.cpp @@ -5287,19 +5287,32 @@ bool OptimizeQuantization::run(Function *F, const CompilationContext &cctx) { bool addNewNodeToWorklist = false; switch (RS->getInput().getNode()->getKind()) { case Kinded::Kind::RescaleQuantizedNodeKind: + [[fallthrough]]; case Kinded::Kind::QuantizeNodeKind: addNewNodeToWorklist = true; + [[fallthrough]]; case Kinded::Kind::SplatNodeKind: + [[fallthrough]]; case Kinded::Kind::AddNodeKind: + [[fallthrough]]; case Kinded::Kind::SubNodeKind: + [[fallthrough]]; case Kinded::Kind::MulNodeKind: + [[fallthrough]]; case Kinded::Kind::DivNodeKind: + [[fallthrough]]; case Kinded::Kind::FmodNodeKind: + [[fallthrough]]; case Kinded::Kind::MinNodeKind: + [[fallthrough]]; case Kinded::Kind::MatMulNodeKind: + [[fallthrough]]; case Kinded::Kind::ConvolutionNodeKind: + [[fallthrough]]; case Kinded::Kind::ChannelwiseQuantizedConvolutionNodeKind: + [[fallthrough]]; case Kinded::Kind::FullyConnectedNodeKind: + [[fallthrough]]; case Kinded::Kind::SparseLengthsWeightedSumNodeKind: { changed = true; Node *newNode = diff --git a/lib/Quantization/Quantization.cpp b/lib/Quantization/Quantization.cpp index 1f9e7b75ee..5926a768ac 100644 --- a/lib/Quantization/Quantization.cpp +++ b/lib/Quantization/Quantization.cpp @@ -325,15 +325,15 @@ class FunctionQuantizer : public FunctionConverter { /// where the macro is inserted to keep the nice code formatting. // clang-format off #define CASES_FOR_SINGLE_MATCHING_IN_OUT_TYPE \ - CASE_SINGLE_MATCHING_INOUT_TYPE(LocalResponseNormalization, Input, Result): \ - CASE_SINGLE_MATCHING_INOUT_TYPE(Slice, Input, Result): \ - CASE_SINGLE_MATCHING_INOUT_TYPE(Reshape, Input, Result): \ - CASE_SINGLE_MATCHING_INOUT_TYPE(Transpose, Input, Result): \ - CASE_SINGLE_MATCHING_INOUT_TYPE(TopK, Input, Values): \ - CASE_SINGLE_MATCHING_INOUT_TYPE(Gather, Data, Result): \ - CASE_SINGLE_MATCHING_INOUT_TYPE(MaxPool, Input, Result): \ - CASE_SINGLE_MATCHING_INOUT_TYPE(ResizeNearest, Input, Result): \ - CASE_SINGLE_MATCHING_INOUT_TYPE(ResizeBilinear, Input, Result): \ + CASE_SINGLE_MATCHING_INOUT_TYPE(LocalResponseNormalization, Input, Result): [[fallthrough]]; \ + CASE_SINGLE_MATCHING_INOUT_TYPE(Slice, Input, Result): [[fallthrough]]; \ + CASE_SINGLE_MATCHING_INOUT_TYPE(Reshape, Input, Result): [[fallthrough]]; \ + CASE_SINGLE_MATCHING_INOUT_TYPE(Transpose, Input, Result): [[fallthrough]]; \ + CASE_SINGLE_MATCHING_INOUT_TYPE(TopK, Input, Values): [[fallthrough]]; \ + CASE_SINGLE_MATCHING_INOUT_TYPE(Gather, Data, Result): [[fallthrough]]; \ + CASE_SINGLE_MATCHING_INOUT_TYPE(MaxPool, Input, Result): [[fallthrough]]; \ + CASE_SINGLE_MATCHING_INOUT_TYPE(ResizeNearest, Input, Result): [[fallthrough]]; \ + CASE_SINGLE_MATCHING_INOUT_TYPE(ResizeBilinear, Input, Result): [[fallthrough]]; \ CASE_SINGLE_MATCHING_INOUT_TYPE(SpaceToDepth, Input, Result) // clang-format on