diff options
Diffstat (limited to 'clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.cpp')
-rw-r--r-- | clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.cpp | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.cpp b/clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.cpp index f0791da..3229e30 100644 --- a/clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.cpp +++ b/clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.cpp @@ -706,13 +706,17 @@ void LoopConvertCheck::doConversion( ReplaceText = Usage.Kind == Usage::UK_MemberThroughArrow ? VarNameOrStructuredBinding + "." : VarNameOrStructuredBinding; - auto Parents = Context->getParents(*Usage.Expression); + const DynTypedNodeList Parents = Context->getParents(*Usage.Expression); if (Parents.size() == 1) { if (const auto *Paren = Parents[0].get<ParenExpr>()) { // Usage.Expression will be replaced with the new index variable, // and parenthesis around a simple DeclRefExpr can always be - // removed. - Range = Paren->getSourceRange(); + // removed except in case of a `sizeof` operator call. + const DynTypedNodeList GrandParents = Context->getParents(*Paren); + if (GrandParents.size() != 1 || + GrandParents[0].get<UnaryExprOrTypeTraitExpr>() == nullptr) { + Range = Paren->getSourceRange(); + } } else if (const auto *UOP = Parents[0].get<UnaryOperator>()) { // If we are taking the address of the loop variable, then we must // not use a copy, as it would mean taking the address of the loop's |