================ @@ -491,11 +491,19 @@ void UnwrappedLineParser::calculateBraceTypes(bool ExpectClassBody) { SmallVector<StackEntry, 8> LBraceStack; assert(Tok->is(tok::l_brace)); do { - // Get next non-comment token. - FormatToken *NextTok; - do { - NextTok = Tokens->getNextToken(); - } while (NextTok->is(tok::comment)); + // Get next non-comment, non-preprocessor token. + FormatToken *NextTok = Tokens->getNextToken(); + while (NextTok->is(tok::comment) || + (NextTok->is(tok::hash) && isOnNewLine(*NextTok))) { + while (NextTok->is(tok::comment)) + NextTok = Tokens->getNextToken(); + while (NextTok->is(tok::hash) && isOnNewLine(*NextTok)) { + ScopedMacroState MacroState(*Line, Tokens, NextTok); + do { + NextTok = Tokens->getNextToken(); + } while (NextTok->isNot(tok::eof)); + } + } ---------------- owenca wrote:
Tested on the following case without `isOnNewLine()`: ``` struct Foo { Foo() : a(2) { #define FOO(foo) \ /* foo */ #foo } Foo &operator+=(const Foo &) { return *this; } }; ``` Also works if the comment is deleted. https://github.com/llvm/llvm-project/pull/69473 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits