This revision was automatically updated to reflect the committed changes. Closed by commit rGc1dc914a8ca2: [clang-tidy] Correct sizeof/alignas handling in misc-redundant-expression (authored by PiotrZSL).
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D152713/new/ https://reviews.llvm.org/D152713 Files: clang-tools-extra/clang-tidy/misc/RedundantExpressionCheck.cpp clang-tools-extra/docs/ReleaseNotes.rst clang-tools-extra/test/clang-tidy/checkers/misc/redundant-expression.cpp Index: clang-tools-extra/test/clang-tidy/checkers/misc/redundant-expression.cpp =================================================================== --- clang-tools-extra/test/clang-tidy/checkers/misc/redundant-expression.cpp +++ clang-tools-extra/test/clang-tidy/checkers/misc/redundant-expression.cpp @@ -843,3 +843,15 @@ return 2; } + +namespace PR63096 { + +struct alignas(sizeof(int)) X { + int x; +}; + +static_assert(alignof(X) == sizeof(X)); +static_assert(sizeof(X) == sizeof(X)); +// CHECK-MESSAGES: :[[@LINE-1]]:25: warning: both sides of operator are equivalent + +} Index: clang-tools-extra/docs/ReleaseNotes.rst =================================================================== --- clang-tools-extra/docs/ReleaseNotes.rst +++ clang-tools-extra/docs/ReleaseNotes.rst @@ -360,6 +360,10 @@ <clang-tidy/checks/misc/definitions-in-headers>` to avoid warning on declarations inside anonymous namespaces. +- Fixed false-positive in :doc:`misc-redundant-expression + <clang-tidy/checks/misc/redundant-expression>` check where expressions like + ``alignof`` or ``sizeof`` were incorrectly flagged as identical. + - Improved :doc:`misc-unused-parameters <clang-tidy/checks/misc/unused-parameters>` check with new `IgnoreVirtual` option to optionally ignore virtual methods. 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 @@ -144,8 +144,9 @@ const auto *RightUnaryExpr = cast<UnaryExprOrTypeTraitExpr>(Right); if (LeftUnaryExpr->isArgumentType() && RightUnaryExpr->isArgumentType()) - return LeftUnaryExpr->getArgumentType() == - RightUnaryExpr->getArgumentType(); + return LeftUnaryExpr->getKind() == RightUnaryExpr->getKind() && + LeftUnaryExpr->getArgumentType() == + RightUnaryExpr->getArgumentType(); if (!LeftUnaryExpr->isArgumentType() && !RightUnaryExpr->isArgumentType()) return areEquivalentExpr(LeftUnaryExpr->getArgumentExpr(), RightUnaryExpr->getArgumentExpr());
Index: clang-tools-extra/test/clang-tidy/checkers/misc/redundant-expression.cpp =================================================================== --- clang-tools-extra/test/clang-tidy/checkers/misc/redundant-expression.cpp +++ clang-tools-extra/test/clang-tidy/checkers/misc/redundant-expression.cpp @@ -843,3 +843,15 @@ return 2; } + +namespace PR63096 { + +struct alignas(sizeof(int)) X { + int x; +}; + +static_assert(alignof(X) == sizeof(X)); +static_assert(sizeof(X) == sizeof(X)); +// CHECK-MESSAGES: :[[@LINE-1]]:25: warning: both sides of operator are equivalent + +} Index: clang-tools-extra/docs/ReleaseNotes.rst =================================================================== --- clang-tools-extra/docs/ReleaseNotes.rst +++ clang-tools-extra/docs/ReleaseNotes.rst @@ -360,6 +360,10 @@ <clang-tidy/checks/misc/definitions-in-headers>` to avoid warning on declarations inside anonymous namespaces. +- Fixed false-positive in :doc:`misc-redundant-expression + <clang-tidy/checks/misc/redundant-expression>` check where expressions like + ``alignof`` or ``sizeof`` were incorrectly flagged as identical. + - Improved :doc:`misc-unused-parameters <clang-tidy/checks/misc/unused-parameters>` check with new `IgnoreVirtual` option to optionally ignore virtual methods. 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 @@ -144,8 +144,9 @@ const auto *RightUnaryExpr = cast<UnaryExprOrTypeTraitExpr>(Right); if (LeftUnaryExpr->isArgumentType() && RightUnaryExpr->isArgumentType()) - return LeftUnaryExpr->getArgumentType() == - RightUnaryExpr->getArgumentType(); + return LeftUnaryExpr->getKind() == RightUnaryExpr->getKind() && + LeftUnaryExpr->getArgumentType() == + RightUnaryExpr->getArgumentType(); if (!LeftUnaryExpr->isArgumentType() && !RightUnaryExpr->isArgumentType()) return areEquivalentExpr(LeftUnaryExpr->getArgumentExpr(), RightUnaryExpr->getArgumentExpr());
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits