Author: Owen Pan Date: 2025-04-24T20:17:07-07:00 New Revision: 82f1f5e5d4104fa276386f4840eacef9c44becce
URL: https://github.com/llvm/llvm-project/commit/82f1f5e5d4104fa276386f4840eacef9c44becce DIFF: https://github.com/llvm/llvm-project/commit/82f1f5e5d4104fa276386f4840eacef9c44becce.diff LOG: [clang-format] Correctly identify include guards (#137112) Fix #136814 Added: Modified: clang/lib/Format/UnwrappedLineParser.cpp clang/unittests/Format/FormatTest.cpp Removed: ################################################################################ diff --git a/clang/lib/Format/UnwrappedLineParser.cpp b/clang/lib/Format/UnwrappedLineParser.cpp index df58e5ef4d6a3..565dcfce4ec18 100644 --- a/clang/lib/Format/UnwrappedLineParser.cpp +++ b/clang/lib/Format/UnwrappedLineParser.cpp @@ -1156,6 +1156,7 @@ void UnwrappedLineParser::parsePPDefine() { return; } + bool MaybeIncludeGuard = false; if (IncludeGuard == IG_IfNdefed && IncludeGuardToken->TokenText == FormatTok->TokenText) { IncludeGuard = IG_Defined; @@ -1166,6 +1167,7 @@ void UnwrappedLineParser::parsePPDefine() { break; } } + MaybeIncludeGuard = IncludeGuard == IG_Defined; } // In the context of a define, even keywords should be treated as normal @@ -1176,6 +1178,11 @@ void UnwrappedLineParser::parsePPDefine() { FormatTok->Tok.setKind(tok::identifier); FormatTok->Tok.setIdentifierInfo(Keywords.kw_internal_ident_after_define); nextToken(); + + // IncludeGuard can't have a non-empty macro definition. + if (MaybeIncludeGuard && !eof()) + IncludeGuard = IG_Rejected; + if (FormatTok->Tok.getKind() == tok::l_paren && !FormatTok->hasWhitespaceBefore()) { parseParens(); diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index 8543c1b565d6d..333d40d481025 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -6492,6 +6492,18 @@ TEST_F(FormatTest, IndentPreprocessorDirectives) { "#if 1\n" "#endif", Style); + + verifyFormat("#ifndef ABCDE\n" + " #define ABCDE 0\n" + "#endif\n" + "\n" + "#define FGHIJK", + "#ifndef ABCDE\n" + "#define ABCDE 0\n" + "#endif\n" + "\n" + "#define FGHIJK", + Style); } TEST_F(FormatTest, FormatAlignInsidePreprocessorElseBlock) { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits