Index: clang-tidy/modernize/UseOverrideCheck.cpp =================================================================== --- clang-tidy/modernize/UseOverrideCheck.cpp +++ clang-tidy/modernize/UseOverrideCheck.cpp @@ -162,11 +162,41 @@ Tokens.back().is(tok::kw_default) || Tokens.back().is(tok::kw_delete)) && GetText(Tokens[Tokens.size() - 2], Sources) == "=") { + + if (Tokens.size() > 3 && + GetText(Tokens[Tokens.size() - 3], Sources) == "const" && + Tokens[Tokens.size() - 2].getLocation() == + Tokens[Tokens.size() - 3].getEndLoc()) { + ReplacementText = " override"; + } + InsertLoc = Tokens[Tokens.size() - 2].getLocation(); } else if (GetText(Tokens.back(), Sources) == "ABSTRACT") { InsertLoc = Tokens.back().getLocation(); } } + + if (!InsertLoc.isValid()) { + // For declarations marked with "throw(...)", the override keyword + // should be inserted last, immediately before the ending semi-colon + Token ThrowToken; + for (Token T : Tokens) { + if (T.is(tok::kw_throw)) { + ThrowToken = T; + break; + } + } + if (ThrowToken.is(tok::kw_throw)) { + Token LastNonCommentToken; + for (Token T : Tokens) { + if (!T.is(tok::comment)) { + LastNonCommentToken = T; + } + } + InsertLoc = LastNonCommentToken.getEndLoc(); + ReplacementText = " override"; + } + } if (!InsertLoc.isValid()) { InsertLoc = FileRange.getEnd();