hokein created this revision. hokein added a reviewer: gribozavr. Herald added a subscriber: xazax.hun. Herald added a project: clang.
The assertion "isIntegerConstantExpr" is triggered in the isIntegerConstantExpr(), we should not call it if the expression is value dependent. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D62947 Files: clang-tools-extra/clang-tidy/misc/RedundantExpressionCheck.cpp clang-tools-extra/test/clang-tidy/misc-redundant-expression.cpp Index: clang-tools-extra/test/clang-tidy/misc-redundant-expression.cpp =================================================================== --- clang-tools-extra/test/clang-tidy/misc-redundant-expression.cpp +++ clang-tools-extra/test/clang-tidy/misc-redundant-expression.cpp @@ -725,3 +725,15 @@ #undef FLAG1 #undef FLAG2 #undef FLAG3 + +namespace no_crash { +struct Foo {}; +bool operator<(const Foo&, const Foo&); +template <class T> +struct Bar { + static const Foo &GetFoo(); + static bool Test(const T & maybe_foo, const Foo& foo) { + return foo < GetFoo() && foo < maybe_foo; + } +}; +} Index: clang-tools-extra/clang-tidy/misc/RedundantExpressionCheck.cpp =================================================================== --- clang-tools-extra/clang-tidy/misc/RedundantExpressionCheck.cpp +++ clang-tools-extra/clang-tidy/misc/RedundantExpressionCheck.cpp @@ -291,7 +291,7 @@ } AST_MATCHER(Expr, isIntegerConstantExpr) { - if (Node.isInstantiationDependent()) + if (Node.isInstantiationDependent() || Node.isValueDependent()) return false; return Node.isIntegerConstantExpr(Finder->getASTContext()); }
Index: clang-tools-extra/test/clang-tidy/misc-redundant-expression.cpp =================================================================== --- clang-tools-extra/test/clang-tidy/misc-redundant-expression.cpp +++ clang-tools-extra/test/clang-tidy/misc-redundant-expression.cpp @@ -725,3 +725,15 @@ #undef FLAG1 #undef FLAG2 #undef FLAG3 + +namespace no_crash { +struct Foo {}; +bool operator<(const Foo&, const Foo&); +template <class T> +struct Bar { + static const Foo &GetFoo(); + static bool Test(const T & maybe_foo, const Foo& foo) { + return foo < GetFoo() && foo < maybe_foo; + } +}; +} Index: clang-tools-extra/clang-tidy/misc/RedundantExpressionCheck.cpp =================================================================== --- clang-tools-extra/clang-tidy/misc/RedundantExpressionCheck.cpp +++ clang-tools-extra/clang-tidy/misc/RedundantExpressionCheck.cpp @@ -291,7 +291,7 @@ } AST_MATCHER(Expr, isIntegerConstantExpr) { - if (Node.isInstantiationDependent()) + if (Node.isInstantiationDependent() || Node.isValueDependent()) return false; return Node.isIntegerConstantExpr(Finder->getASTContext()); }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits