r232166 - clang-format: Don't corrupt macros with open braces.
Daniel Jasper
djasper at google.com
Fri Mar 13 06:32:11 PDT 2015
Author: djasper
Date: Fri Mar 13 08:32:11 2015
New Revision: 232166
URL: http://llvm.org/viewvc/llvm-project?rev=232166&view=rev
Log:
clang-format: Don't corrupt macros with open braces.
Formatting:
#define A { {
#define B } }
Before:
#define A \
{ \
{ #define B } \
}
After:
#define A \
{ \
{
#define B \
} \
}
This fixes llvm.org/PR22884.
Modified:
cfe/trunk/lib/Format/UnwrappedLineFormatter.cpp
cfe/trunk/unittests/Format/FormatTest.cpp
Modified: cfe/trunk/lib/Format/UnwrappedLineFormatter.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/UnwrappedLineFormatter.cpp?rev=232166&r1=232165&r2=232166&view=diff
==============================================================================
--- cfe/trunk/lib/Format/UnwrappedLineFormatter.cpp (original)
+++ cfe/trunk/lib/Format/UnwrappedLineFormatter.cpp Fri Mar 13 08:32:11 2015
@@ -35,10 +35,18 @@ public:
tryFitMultipleLinesInOne(unsigned Indent,
SmallVectorImpl<AnnotatedLine *>::const_iterator I,
SmallVectorImpl<AnnotatedLine *>::const_iterator E) {
+ // Can't join the last line with anything.
+ if (I + 1 == E)
+ return 0;
// We can never merge stuff if there are trailing line comments.
const AnnotatedLine *TheLine = *I;
if (TheLine->Last->is(TT_LineComment))
return 0;
+ if (I[1]->Type == LT_Invalid || I[1]->First->MustBreakBefore)
+ return 0;
+ if (TheLine->InPPDirective &&
+ (!I[1]->InPPDirective || I[1]->First->HasUnescapedNewline))
+ return 0;
if (Style.ColumnLimit > 0 && Indent > Style.ColumnLimit)
return 0;
@@ -51,9 +59,6 @@ public:
? 0
: Limit - TheLine->Last->TotalLength;
- if (I + 1 == E || I[1]->Type == LT_Invalid || I[1]->First->MustBreakBefore)
- return 0;
-
// FIXME: TheLine->Level != 0 might or might not be the right check to do.
// If necessary, change to something smarter.
bool MergeShortFunctions =
@@ -121,8 +126,6 @@ private:
unsigned Limit) {
if (Limit == 0)
return 0;
- if (!I[1]->InPPDirective || I[1]->First->HasUnescapedNewline)
- return 0;
if (I + 2 != E && I[2]->InPPDirective && !I[2]->First->HasUnescapedNewline)
return 0;
if (1 + I[1]->Last->TotalLength > Limit)
Modified: cfe/trunk/unittests/Format/FormatTest.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/FormatTest.cpp?rev=232166&r1=232165&r2=232166&view=diff
==============================================================================
--- cfe/trunk/unittests/Format/FormatTest.cpp (original)
+++ cfe/trunk/unittests/Format/FormatTest.cpp Fri Mar 13 08:32:11 2015
@@ -2686,6 +2686,13 @@ TEST_F(FormatTest, MacroDefinitionsWithI
"#define b }\\\n"
" a\n"
"a");
+ verifyFormat("#define A \\\n"
+ " { \\\n"
+ " {\n"
+ "#define B \\\n"
+ " } \\\n"
+ " }",
+ getLLVMStyleWithColumns(15));
verifyNoCrash("#if a\na(\n#else\n#endif\n{a");
verifyNoCrash("a={0,1\n#if a\n#else\n;\n#endif\n}");
More information about the cfe-commits
mailing list