r186324 - clang-format: Improve c-style cast detection.
Daniel Jasper
djasper at google.com
Mon Jul 15 08:04:43 PDT 2013
Author: djasper
Date: Mon Jul 15 10:04:42 2013
New Revision: 186324
URL: http://llvm.org/viewvc/llvm-project?rev=186324&view=rev
Log:
clang-format: Improve c-style cast detection.
Before:
#define x ((int) - 1)
#define p(q) ((int *) & q)
After:
#define x ((int)-1)
#define p(q) ((int *)&q)
Modified:
cfe/trunk/lib/Format/TokenAnnotator.cpp
cfe/trunk/unittests/Format/FormatTest.cpp
Modified: cfe/trunk/lib/Format/TokenAnnotator.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/TokenAnnotator.cpp?rev=186324&r1=186323&r2=186324&view=diff
==============================================================================
--- cfe/trunk/lib/Format/TokenAnnotator.cpp (original)
+++ cfe/trunk/lib/Format/TokenAnnotator.cpp Mon Jul 15 10:04:42 2013
@@ -644,7 +644,8 @@ private:
LeftOfParens &&
LeftOfParens->isOneOf(tok::kw_sizeof, tok::kw_alignof);
if (ParensAreType && !ParensCouldEndDecl && !IsSizeOfOrAlignOf &&
- Contexts.back().IsExpression)
+ (Contexts.back().IsExpression ||
+ (Current.Next && Current.Next->isBinaryOperator())))
IsCast = true;
if (Current.Next && Current.Next->isNot(tok::string_literal) &&
(Current.Next->Tok.isLiteral() ||
@@ -1084,7 +1085,7 @@ unsigned TokenAnnotator::splitPenalty(co
(Content.back() == ':' || Content.back() == '='))
return 25;
}
- return 1; // Breaking at a << is really cheap.
+ return 1; // Breaking at a << is really cheap.
}
if (Left.Type == TT_ConditionalExpr)
return prec::Conditional;
Modified: cfe/trunk/unittests/Format/FormatTest.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/FormatTest.cpp?rev=186324&r1=186323&r2=186324&view=diff
==============================================================================
--- cfe/trunk/unittests/Format/FormatTest.cpp (original)
+++ cfe/trunk/unittests/Format/FormatTest.cpp Mon Jul 15 10:04:42 2013
@@ -3565,6 +3565,8 @@ TEST_F(FormatTest, FormatsCasts) {
verifyFormat("my_int a = (my_int)2.0f;");
verifyFormat("my_int a = (my_int)sizeof(int);");
verifyFormat("return (my_int)aaa;");
+ verifyFormat("#define x ((int)-1)");
+ verifyFormat("#define p(q) ((int *)&q)");
// FIXME: Without type knowledge, this can still fall apart miserably.
verifyFormat("void f() { my_int a = (my_int) * b; }");
More information about the cfe-commits
mailing list