[cfe-commits] r171396 - in /cfe/trunk: lib/Format/Format.cpp unittests/Format/FormatTest.cpp
Daniel Jasper
djasper at google.com
Wed Jan 2 09:21:37 PST 2013
Author: djasper
Date: Wed Jan 2 11:21:36 2013
New Revision: 171396
URL: http://llvm.org/viewvc/llvm-project?rev=171396&view=rev
Log:
Format */& as binary operator if followed by a unary operator.
This fixes llvm.org/PR14687.
Also fixes segfault for lines starting with * or &.
Before:
a *~b;
*a = 1; // <- this segfaulted
After:
a * ~b;
*a = 1; // no segfault :-)
Modified:
cfe/trunk/lib/Format/Format.cpp
cfe/trunk/unittests/Format/FormatTest.cpp
Modified: cfe/trunk/lib/Format/Format.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/Format.cpp?rev=171396&r1=171395&r2=171396&view=diff
==============================================================================
--- cfe/trunk/lib/Format/Format.cpp (original)
+++ cfe/trunk/lib/Format/Format.cpp Wed Jan 2 11:21:36 2013
@@ -835,19 +835,23 @@
}
TokenAnnotation::TokenType determineStarAmpUsage(unsigned Index, bool IsRHS) {
+ if (Index == 0)
+ return TokenAnnotation::TT_UnaryOperator;
if (Index == Annotations.size())
return TokenAnnotation::TT_Unknown;
const FormatToken &PrevToken = Line.Tokens[Index - 1];
const FormatToken &NextToken = Line.Tokens[Index + 1];
- if (Index == 0 || PrevToken.Tok.is(tok::l_paren) ||
- PrevToken.Tok.is(tok::comma) || PrevToken.Tok.is(tok::kw_return) ||
- PrevToken.Tok.is(tok::colon) ||
+ if (PrevToken.Tok.is(tok::l_paren) || PrevToken.Tok.is(tok::comma) ||
+ PrevToken.Tok.is(tok::kw_return) || PrevToken.Tok.is(tok::colon) ||
Annotations[Index - 1].Type == TokenAnnotation::TT_BinaryOperator)
return TokenAnnotation::TT_UnaryOperator;
if (PrevToken.Tok.isLiteral() || NextToken.Tok.isLiteral() ||
- NextToken.Tok.is(tok::kw_sizeof))
+ NextToken.Tok.is(tok::plus) || NextToken.Tok.is(tok::minus) ||
+ NextToken.Tok.is(tok::plusplus) || NextToken.Tok.is(tok::minusminus) ||
+ NextToken.Tok.is(tok::tilde) || NextToken.Tok.is(tok::exclaim) ||
+ NextToken.Tok.is(tok::kw_alignof) || NextToken.Tok.is(tok::kw_sizeof))
return TokenAnnotation::TT_BinaryOperator;
if (NextToken.Tok.is(tok::comma) || NextToken.Tok.is(tok::r_paren) ||
@@ -931,7 +935,7 @@
return Left.is(tok::kw_if) || Left.is(tok::kw_for) ||
Left.is(tok::kw_while) || Left.is(tok::kw_switch) ||
(Left.isNot(tok::identifier) && Left.isNot(tok::kw_sizeof) &&
- Left.isNot(tok::kw_typeof));
+ Left.isNot(tok::kw_typeof) && Left.isNot(tok::kw_alignof));
}
return true;
}
Modified: cfe/trunk/unittests/Format/FormatTest.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/FormatTest.cpp?rev=171396&r1=171395&r2=171396&view=diff
==============================================================================
--- cfe/trunk/unittests/Format/FormatTest.cpp (original)
+++ cfe/trunk/unittests/Format/FormatTest.cpp Wed Jan 2 11:21:36 2013
@@ -28,6 +28,7 @@
CharSourceRange::getCharRange(Start, Start.getLocWithOffset(Length)));
LangOptions LangOpts;
LangOpts.CPlusPlus = 1;
+ LangOpts.CPlusPlus11 = 1;
Lexer Lex(ID, Context.Sources.getBuffer(ID), Context.Sources, LangOpts);
tooling::Replacements Replace =
reformat(Style, Lex, Context.Sources, Ranges);
@@ -676,7 +677,9 @@
verifyFormat("a-- > b;");
verifyFormat("b ? -a : c;");
verifyFormat("n * sizeof char16;");
+ verifyFormat("n * alignof char16;");
verifyFormat("sizeof(char);");
+ verifyFormat("alignof(char);");
verifyFormat("return -1;");
verifyFormat("switch (a) {\n"
@@ -724,6 +727,13 @@
verifyFormat("return a & ~b;");
verifyFormat("f(b ? *c : *d);");
verifyFormat("int a = b ? *c : *d;");
+ verifyFormat("*b = a;");
+ verifyFormat("a * ~b;");
+ verifyFormat("a * !b;");
+ verifyFormat("a * +b;");
+ verifyFormat("a * -b;");
+ verifyFormat("a * ++b;");
+ verifyFormat("a * --b;");
// FIXME: Is this desired for LLVM? Fix if not.
verifyFormat("A<int *> a;");
More information about the cfe-commits
mailing list