summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOwen Pan <owenpiano@gmail.com>2023-01-23 15:30:38 -0800
committerOwen Pan <owenpiano@gmail.com>2023-01-24 18:40:14 -0800
commit56313f65cce71366fdc659d1d08e0eeaa5d40b63 (patch)
tree00d4c59696150b5e81c22a5af8c91e1771ebcd38
parent17c05a44d9f0ab08342c7310bd0e22114e932882 (diff)
downloadllvm-56313f65cce71366fdc659d1d08e0eeaa5d40b63.tar.gz
[clang-format] Put peekNextToken(/*SkipComment=*/true) to good use
To prevent potential bugs in situations where we want to peek the next non-comment token. Differential Revision: https://reviews.llvm.org/D142412
-rw-r--r--clang/lib/Format/UnwrappedLineParser.cpp6
-rw-r--r--clang/unittests/Format/FormatTest.cpp20
2 files changed, 24 insertions, 2 deletions
diff --git a/clang/lib/Format/UnwrappedLineParser.cpp b/clang/lib/Format/UnwrappedLineParser.cpp
index 6d5b92c61c78..3e58b6f90559 100644
--- a/clang/lib/Format/UnwrappedLineParser.cpp
+++ b/clang/lib/Format/UnwrappedLineParser.cpp
@@ -1906,7 +1906,9 @@ void UnwrappedLineParser::parseStructuralElement(
// declaration.
if (!IsTopLevel || !Style.isCpp() || !Previous || eof())
break;
- if (isC78ParameterDecl(FormatTok, Tokens->peekNextToken(), Previous)) {
+ if (isC78ParameterDecl(FormatTok,
+ Tokens->peekNextToken(/*SkipComment=*/true),
+ Previous)) {
addUnwrappedLine();
return;
}
@@ -2376,7 +2378,7 @@ bool UnwrappedLineParser::tryToParseLambdaIntroducer() {
if (FormatTok->is(tok::l_square))
return false;
if (FormatTok->is(tok::r_square)) {
- const FormatToken *Next = Tokens->peekNextToken();
+ const FormatToken *Next = Tokens->peekNextToken(/*SkipComment=*/true);
if (Next->is(tok::greater))
return false;
}
diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp
index b7d0a398dd43..6530e2005e4c 100644
--- a/clang/unittests/Format/FormatTest.cpp
+++ b/clang/unittests/Format/FormatTest.cpp
@@ -3444,6 +3444,13 @@ TEST_F(FormatTest, UnderstandsAccessSpecifiers) {
"\n"
"private:\n"
" int c;\n"
+ "};\n"
+ "class B {\n"
+ "public:\n"
+ " std::unique_ptr<int *[] /* okay */> b() { return nullptr; }\n"
+ "\n"
+ "private:\n"
+ " int c;\n"
"};");
}
@@ -9637,6 +9644,19 @@ TEST_F(FormatTest, ReturnTypeBreakingStyle) {
" return a;\n"
"}",
Style);
+ verifyFormat("byte *\n"
+ "f(a)\n"
+ "byte /* K&R C */ a[];\n"
+ "{\n"
+ " return a;\n"
+ "}\n"
+ "byte *\n"
+ "g(p)\n"
+ "byte /* K&R C */ *p;\n"
+ "{\n"
+ " return p;\n"
+ "}",
+ Style);
verifyFormat("bool f(int a, int) override;\n"
"Bar g(int a, Bar) final;\n"
"Bar h(a, Bar) final;",