Skip to content

Commit 2c3f738

Browse files
committedOct 7, 2019
[clang-format] [PR27004] omits leading space for noexcept when formatting operator delete()
Summary: clang-format is incorrectly thinking the parameter parens are part of a cast operation, this is resulting in there sometimes being not space between the paren and the noexcept (and other keywords like volatile etc..) ``` void operator++(int) noexcept; void operator++(int &) noexcept; void operator delete(void *, std::size_t, const std::nothrow_t &)noexcept; ``` Reviewers: klimek, owenpan, mitchell-stellar Reviewed By: mitchell-stellar Subscribers: cfe-commits Tags: #clang-format, #clang Differential Revision: https://reviews.llvm.org/D68481 llvm-svn: 373922
1 parent a65cfe3 commit 2c3f738

File tree

2 files changed

+34
-0
lines changed

2 files changed

+34
-0
lines changed
 

‎clang/lib/Format/TokenAnnotator.cpp

+7
Original file line numberDiff line numberDiff line change
@@ -1611,6 +1611,13 @@ class AnnotatingParser {
16111611
if (Tok.Next->is(tok::question))
16121612
return false;
16131613

1614+
// Functions which end with decorations like volatile, noexcept are unlikely
1615+
// to be casts.
1616+
if (Tok.Next->isOneOf(tok::kw_noexcept, tok::kw_volatile, tok::kw_const,
1617+
tok::kw_throw, tok::l_square, tok::arrow,
1618+
Keywords.kw_override, Keywords.kw_final))
1619+
return false;
1620+
16141621
// As Java has no function types, a "(" after the ")" likely means that this
16151622
// is a cast.
16161623
if (Style.Language == FormatStyle::LK_Java && Tok.Next->is(tok::l_paren))

‎clang/unittests/Format/FormatTest.cpp

+27
Original file line numberDiff line numberDiff line change
@@ -14678,6 +14678,33 @@ TEST_F(FormatTest, AlternativeOperators) {
1467814678
*/
1467914679
}
1468014680

14681+
TEST_F(FormatTest, NotCastRPaen) {
14682+
14683+
verifyFormat("void operator++(int) noexcept;");
14684+
verifyFormat("void operator++(int &) noexcept;");
14685+
verifyFormat("void operator delete(void *, std::size_t, const std::nothrow_t "
14686+
"&) noexcept;");
14687+
verifyFormat(
14688+
"void operator delete(std::size_t, const std::nothrow_t &) noexcept;");
14689+
verifyFormat("void operator delete(const std::nothrow_t &) noexcept;");
14690+
verifyFormat("void operator delete(std::nothrow_t &) noexcept;");
14691+
verifyFormat("void operator delete(nothrow_t &) noexcept;");
14692+
verifyFormat("void operator delete(foo &) noexcept;");
14693+
verifyFormat("void operator delete(foo) noexcept;");
14694+
verifyFormat("void operator delete(int) noexcept;");
14695+
verifyFormat("void operator delete(int &) noexcept;");
14696+
verifyFormat("void operator delete(int &) volatile noexcept;");
14697+
verifyFormat("void operator delete(int &) const");
14698+
verifyFormat("void operator delete(int &) = default");
14699+
verifyFormat("void operator delete(int &) = delete");
14700+
verifyFormat("void operator delete(int &) [[noreturn]]");
14701+
verifyFormat("void operator delete(int &) throw();");
14702+
verifyFormat("void operator delete(int &) throw(int);");
14703+
verifyFormat("auto operator delete(int &) -> int;");
14704+
verifyFormat("auto operator delete(int &) override");
14705+
verifyFormat("auto operator delete(int &) final");
14706+
}
14707+
1468114708
} // end namespace
1468214709
} // end namespace format
1468314710
} // end namespace clang

0 commit comments

Comments
 (0)
Please sign in to comment.