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.

llvm-svn: 232166
This commit is contained in:
Daniel Jasper 2015-03-13 13:32:11 +00:00
parent 60f1db0525
commit 9ecb0e96b8
2 changed files with 15 additions and 5 deletions

View File

@ -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)

View File

@ -2686,6 +2686,13 @@ TEST_F(FormatTest, MacroDefinitionsWithIncompleteCode) {
"#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}");