aboutsummaryrefslogtreecommitdiff
path: root/unittests/Format/FormatTest.cpp
diff options
context:
space:
mode:
authorNico Weber <nicolasweber@gmx.de>2013-02-12 16:17:07 +0000
committerNico Weber <nicolasweber@gmx.de>2013-02-12 16:17:07 +0000
commit95e8e468af284afb11ec1f994d0b5076fc7423d9 (patch)
treee1b3aa02c91880f03e29e24b92d0e5b47f01a307 /unittests/Format/FormatTest.cpp
parent7f43fcf5d9406788ce95c9f3b785e0a6bc75a7f7 (diff)
Formatter: Correctly format stars in `sizeof(int**)` and similar places.
This redoes how '*' and '&' are classified as pointer / reference markers when followed by ')', '>', or ','. Previously, determineStarAmpUsage() marked a single '*' and '&' followed by ')', '>', or ',' as pointer or reference marker. Now, all '*'s and '&'s preceding ')', '>', or ',' are marked as pointer / reference markers. Fixes PR14884. Since only the last '*' in 'int ***' was marked as pointer before (the rest were unary operators, which don't reach spaceRequiredBetween()), spaceRequiredBetween() now had to be thought about handing multiple '*'s in sequence. Before: return sizeof(int * *); Type **A = static_cast<Type * *>(P); Now: return sizeof(int**); Type **A = static_cast<Type **>(P); While here, also make all methods of AnnotatingParser except parseLine() private. Review URL: http://llvm-reviews.chandlerc.com/D384 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@174975 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'unittests/Format/FormatTest.cpp')
-rw-r--r--unittests/Format/FormatTest.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/unittests/Format/FormatTest.cpp b/unittests/Format/FormatTest.cpp
index 9b9f5c71d2..e9520b618c 100644
--- a/unittests/Format/FormatTest.cpp
+++ b/unittests/Format/FormatTest.cpp
@@ -1615,6 +1615,14 @@ TEST_F(FormatTest, UnderstandsUsesOfStarAndAmp) {
verifyIndependentOfContext("a * (a + b);");
verifyIndependentOfContext("(a *)(a + b);");
verifyIndependentOfContext("int *pa = (int *)&a;");
+ verifyIndependentOfContext("return sizeof(int **);");
+ verifyIndependentOfContext("return sizeof(int ******);");
+ verifyIndependentOfContext("return (int **&)a;");
+ verifyGoogleFormat("return sizeof(int**);");
+ verifyIndependentOfContext("Type **A = static_cast<Type **>(P);");
+ verifyGoogleFormat("Type** A = static_cast<Type**>(P);");
+ // FIXME: The newline is wrong.
+ verifyFormat("auto a = [](int **&, int ***) {}\n;");
verifyIndependentOfContext("InvalidRegions[*R] = 0;");
@@ -2540,8 +2548,7 @@ TEST_F(FormatTest, ObjCSnippets) {
verifyFormat("@dynamic textColor;");
verifyFormat("char *buf1 = @encode(int *);");
verifyFormat("char *buf1 = @encode(typeof(4 * 5));");
- // FIXME: Enable once PR14884 is fixed:
- //verifyFormat("char *buf1 = @encode(int **);");
+ verifyFormat("char *buf1 = @encode(int **);");
verifyFormat("Protocol *proto = @protocol(p1);");
verifyFormat("SEL s = @selector(foo:);");
verifyFormat("@synchronized(self) {\n"