Author: alexfh Date: Wed Mar 1 04:16:36 2017 New Revision: 296598 URL: http://llvm.org/viewvc/llvm-project?rev=296598&view=rev Log: [clang-tidy] Fix handling of methods with try-statement as a body in modernize-use-override
Summary: Fix generated by modernize-use-override caused syntax error when method used try-statement as a body. `override` keyword was inserted after last declaration token which happened to be a `try` keyword. This fixes PR27119. Reviewers: ehsan, djasper, alexfh Reviewed By: alexfh Subscribers: JDevlieghere, cfe-commits Tags: #clang-tools-extra Patch by Paweł Żukowski! Differential Revision: https://reviews.llvm.org/D30002 Modified: clang-tools-extra/trunk/clang-tidy/modernize/UseOverrideCheck.cpp clang-tools-extra/trunk/test/clang-tidy/modernize-use-override.cpp Modified: clang-tools-extra/trunk/clang-tidy/modernize/UseOverrideCheck.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/modernize/UseOverrideCheck.cpp?rev=296598&r1=296597&r2=296598&view=diff ============================================================================== --- clang-tools-extra/trunk/clang-tidy/modernize/UseOverrideCheck.cpp (original) +++ clang-tools-extra/trunk/clang-tidy/modernize/UseOverrideCheck.cpp Wed Mar 1 04:16:36 2017 @@ -147,14 +147,13 @@ void UseOverrideCheck::check(const Match // end of the declaration of the function, but prefer to put it on the // same line as the declaration if the beginning brace for the start of // the body falls on the next line. - Token LastNonCommentToken; - for (Token T : Tokens) { - if (!T.is(tok::comment)) { - LastNonCommentToken = T; - } - } - InsertLoc = LastNonCommentToken.getEndLoc(); ReplacementText = " override"; + auto LastTokenIter = std::prev(Tokens.end()); + // When try statement is used instead of compound statement as + // method body - insert override keyword before it. + if (LastTokenIter->is(tok::kw_try)) + LastTokenIter = std::prev(LastTokenIter); + InsertLoc = LastTokenIter->getEndLoc(); } if (!InsertLoc.isValid()) { Modified: clang-tools-extra/trunk/test/clang-tidy/modernize-use-override.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/modernize-use-override.cpp?rev=296598&r1=296597&r2=296598&view=diff ============================================================================== --- clang-tools-extra/trunk/test/clang-tidy/modernize-use-override.cpp (original) +++ clang-tools-extra/trunk/test/clang-tidy/modernize-use-override.cpp Wed Mar 1 04:16:36 2017 @@ -288,3 +288,17 @@ struct MembersOfSpecializations : public }; template <> void MembersOfSpecializations<3>::a() {} void ff() { MembersOfSpecializations<3>().a(); }; + +// In case try statement is used as a method body, +// make sure that override fix is placed before try keyword. +struct TryStmtAsBody : public Base { + void a() try + // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: annotate this + // CHECK-FIXES: {{^}} void a() override try + { b(); } catch(...) { c(); } + + virtual void d() try + // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: prefer using + // CHECK-FIXES: {{^}} void d() override try + { e(); } catch(...) { f(); } +}; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits