Skip to content

Commit c82243d

Browse files
[clang-format] : Fix additional pointer alignment for overloaded operators
Summary: Follow on from {D78879} to handle the more obscure to prevent spaces between operators ``` operator void *&(); operator void *&&(); operator void &*(); operator void &&*(); ``` Reviewers: sylvestre.ledru, sammccall, krasimir, Abpostelnicu Reviewed By: sammccall, Abpostelnicu Subscribers: cfe-commits Tags: #clang, #clang-format Differential Revision: https://reviews.llvm.org/D79201
1 parent b2eb439 commit c82243d

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

clang/lib/Format/TokenAnnotator.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2818,7 +2818,7 @@ bool TokenAnnotator::spaceRequiredBetween(const AnnotatedLine &Line,
28182818
tok::l_square));
28192819
if (Right.is(tok::star) && Left.is(tok::l_paren))
28202820
return false;
2821-
if (Right.is(tok::star) && Left.is(tok::star))
2821+
if (Left.is(tok::star) && Right.isOneOf(tok::star, tok::amp, tok::ampamp))
28222822
return false;
28232823
if (Right.isOneOf(tok::star, tok::amp, tok::ampamp)) {
28242824
const FormatToken *Previous = &Left;

clang/unittests/Format/FormatTest.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15760,6 +15760,8 @@ TEST_F(FormatTest, OperatorSpacing) {
1576015760
verifyFormat("Foo::operator*();", Style);
1576115761
verifyFormat("Foo::operator void *();", Style);
1576215762
verifyFormat("Foo::operator void **();", Style);
15763+
verifyFormat("Foo::operator void *&();", Style);
15764+
verifyFormat("Foo::operator void *&&();", Style);
1576315765
verifyFormat("Foo::operator()(void *);", Style);
1576415766
verifyFormat("Foo::operator*(void *);", Style);
1576515767
verifyFormat("Foo::operator*();", Style);
@@ -15773,6 +15775,10 @@ TEST_F(FormatTest, OperatorSpacing) {
1577315775
verifyFormat("Foo::operator<Foo> &();", Style);
1577415776
verifyFormat("Foo::operator<int> &&();", Style);
1577515777
verifyFormat("Foo::operator<Foo> &&();", Style);
15778+
verifyFormat("Foo::operator<int> *&();", Style);
15779+
verifyFormat("Foo::operator<Foo> *&();", Style);
15780+
verifyFormat("Foo::operator<int> *&&();", Style);
15781+
verifyFormat("Foo::operator<Foo> *&&();", Style);
1577615782
verifyFormat("operator*(int (*)(), class Foo);", Style);
1577715783

1577815784
verifyFormat("Foo::operator&();", Style);
@@ -15796,12 +15802,15 @@ TEST_F(FormatTest, OperatorSpacing) {
1579615802
verifyFormat("operator const FooRight<Object> &()", Style);
1579715803
verifyFormat("operator const FooRight<Object> *()", Style);
1579815804
verifyFormat("operator const FooRight<Object> **()", Style);
15805+
verifyFormat("operator const FooRight<Object> *&()", Style);
15806+
verifyFormat("operator const FooRight<Object> *&&()", Style);
1579915807

1580015808
Style.PointerAlignment = FormatStyle::PAS_Left;
1580115809
verifyFormat("Foo::operator*();", Style);
1580215810
verifyFormat("Foo::operator**();", Style);
1580315811
verifyFormat("Foo::operator void*();", Style);
1580415812
verifyFormat("Foo::operator void**();", Style);
15813+
verifyFormat("Foo::operator void*&();", Style);
1580515814
verifyFormat("Foo::operator/*comment*/ void*();", Style);
1580615815
verifyFormat("Foo::operator/*a*/ const /*b*/ void*();", Style);
1580715816
verifyFormat("Foo::operator/*a*/ volatile /*b*/ void*();", Style);
@@ -15812,10 +15821,13 @@ TEST_F(FormatTest, OperatorSpacing) {
1581215821
verifyFormat("Foo::operator<Foo>*();", Style);
1581315822
verifyFormat("Foo::operator<int>**();", Style);
1581415823
verifyFormat("Foo::operator<Foo>**();", Style);
15824+
verifyFormat("Foo::operator<Foo>*&();", Style);
1581515825
verifyFormat("Foo::operator<int>&();", Style);
1581615826
verifyFormat("Foo::operator<Foo>&();", Style);
1581715827
verifyFormat("Foo::operator<int>&&();", Style);
1581815828
verifyFormat("Foo::operator<Foo>&&();", Style);
15829+
verifyFormat("Foo::operator<int>*&();", Style);
15830+
verifyFormat("Foo::operator<Foo>*&();", Style);
1581915831
verifyFormat("operator*(int (*)(), class Foo);", Style);
1582015832

1582115833
verifyFormat("Foo::operator&();", Style);
@@ -15844,6 +15856,8 @@ TEST_F(FormatTest, OperatorSpacing) {
1584415856
verifyFormat("operator const FooLeft<Object>&()", Style);
1584515857
verifyFormat("operator const FooLeft<Object>*()", Style);
1584615858
verifyFormat("operator const FooLeft<Object>**()", Style);
15859+
verifyFormat("operator const FooLeft<Object>*&()", Style);
15860+
verifyFormat("operator const FooLeft<Object>*&&()", Style);
1584715861

1584815862
// PR45107
1584915863
verifyFormat("operator Vector<String>&();", Style);

0 commit comments

Comments
 (0)