[clang-format] Macros option allows extraneous whitespace to persist
- Dominant language
- LLVM
- Stars
- 40.5k
- Forks
- 18.7k
- PR merge metrics
- PR metrics pending
Description
Defining a function-like macro with the `Macros` option in `.clang-format` and then using it within a function declaration allows one extra space to remain, even when it shouldn't. However, it will not add a space if one doesn't already exist. (tested on 8e90208)
`.clang-format`:
```yaml
Macros:
- X(x) = x
```
Case 1 (works as expected)
`test.c`:
```c
#define X(T) T
void a(X(int) *b) {}
```
Running `clang-format` has no change, as expected.
Case 2 (fails, extra space is kept)
`test.c`:
```c
#define X(T) T
void a( X(int) *b) {}
```
Running `clang-format` has no change, but it should remove the extra space between `(` and `X`. If more spaces are added between `(` and `X`, then running `clang-format` removes all but one space.
Log with -debug (expected, case 1):
```
Args: bin/clang-format /tmp/c/test2.c -debug
Trying /tmp/c/.clang-format...
Using configuration file /tmp/c/.clang-format
File encoding: UTF8
Language: C
----
Next [0] Token: hash / #, Macro: 0
Peeking [1] Token: identifier / define, Macro: 0
Next [1] Token: identifier / define, Macro: 0
Next [2] Token: identifier / X, Macro: 0
Next [3] Token: l_paren / (, Macro: 0
Next [4] Token: identifier / T, Macro: 0
Next [5] Token: r_paren / ), Macro: 0
Next [6] Token: identifier / T, Macro: 0
Adding unwrapped line:
Line(0, FSC=0) MACRO: hash[T=168, OC=0, "#"] identifier[T=168, OC=1, "define"] identifier[T=168, OC=8, "X"] l_paren[T=168, OC=9, "("] identifier[T=168, OC=10, "T"] r_paren[T=168, OC=11, ")"]
Peeking [7] Token: void / void, Macro: 0
Next [7] Token: void / void, Macro: 0
Adding unwrapped line:
Line(1, FSC=0) MACRO: identifier[T=168, OC=13, "T"]
Next [8] Token: identifier / a, Macro: 0
Next [9] Token: l_paren / (, Macro: 0
Next [10] Token: identifier / X, Macro: 0
Getting Position: 10
Next [11] Token: l_paren / (, Macro: 0
Getting Position: 11
Next [12] Token: int / int, Macro: 0
Next [13] Token: r_paren / ), Macro: 0
Next [14] Token: star / *, Macro: 0
Macro call: X((int )
Inserting:
[20] Token: int / int, Macro: 1
[21] Token: eof / , Macro: 1
Jump from: 21 -> 14
At inserted token [20] Token: int / int, Macro: 1
Expanded: int
Next [14] Token: star / *, Macro: 0
Next [15] Token: identifier / b, Macro: 0
Next [16] Token: r_paren / ), Macro: 0
Next [17] Token: l_brace / {, Macro: 0
Peeking [18] Token: r_brace / }, Macro: 0
Getting Position: 17
Next [18] Token: r_brace / }, Macro: 0
Next [19] Token: eof / , Macro: 0
Setting Position: 17
Peeking [18] Token: r_brace / }, Macro: 0
Next [18] Token: r_brace / }, Macro: 0
Adding unwrapped line:
Line(0, FSC=0): void[T=168, OC=0, "void"] identifier[T=168, OC=5, "a"] l_paren[T=168, OC=6, "("] int[T=168, OC=9, "int"] star[T=168, OC=14, "*"] identifier[T=168, OC=15, "b"] r_paren[T=168, OC=16, ")"] l_brace[T=52, OC=18, "{"]
MCR: new line...
MCR: Token: void, Parent: , First: 1
ParentMap:
MCR: New parent:
-> void
MCR: Token: a, Parent: , First: 0
ParentMap:
MCR: New parent:
-> a
MCR: Token: (, Parent: , First: 0
ParentMap:
MCR: New parent:
-> (
MCR: Token: int, Parent: , First: 0
ParentMap:
MCR: New parent:
-> X
ParentLastToken:
-> (
ParentMap:
-> (
MCR: New parent: (
MacroCallLParen: (, OpenMacroParent: (
-> int
-> )
MCR: Token: *, Parent: , First: 0
ParentMap:
MCR: New parent:
-> *
MCR: Token: b, Parent: , First: 0
ParentMap:
MCR: New parent:
-> b
MCR: Token: ), Parent: , First: 0
ParentMap:
MCR: New parent:
-> )
MCR: Token: {, Parent: , First: 0
ParentMap:
MCR: New parent:
-> {
Finalizing reconstructed lines:
void a ( X (
int
) * b ) {
Adding unexpanded line:
Line(0, FSC=0): void[T=168, OC=0, "void"] identifier[T=168, OC=5, "a"] l_paren[T=168, OC=6, "("] identifier[T=168, OC=7, "X"] l_paren[T=168, OC=8, "("] int[T=168, OC=9, "int"] r_paren[T=168, OC=12, ")"] star[T=168, OC=14, "*"] identifier[T=168, OC=15, "b"] r_paren[T=168, OC=16, ")"] l_brace[T=52, OC=18, "{"]
Next [19] Token: eof / , Macro: 0
Adding unwrapped line:
Line(0, FSC=0): r_brace[T=168, OC=19, "}"]
Adding unwrapped line:
Line(0, FSC=0): eof[T=168, OC=0, ""]
Expanded lines:
Line(0, FSC=0) MACRO: hash[T=168, OC=0, "#"] identifier[T=168, OC=1, "define"] identifier[T=168, OC=8, "X"] l_paren[T=168, OC=9, "("] identifier[T=168, OC=10, "T"] r_paren[T=168, OC=11, ")"]
Line(1, FSC=0) MACRO: identifier[T=168, OC=13, "T"]
Line(0, FSC=0): void[T=168, OC=0, "void"] identifier[T=168, OC=5, "a"] l_paren[T=168, OC=6, "("] int[T=168, OC=9, "int"] star[T=168, OC=14, "*"] identifier[T=168, OC=15, "b"] r_paren[T=168, OC=16, ")"] l_brace[T=52, OC=18, "{"]
Line(0, FSC=0): r_brace[T=168, OC=19, "}"]
Line(0, FSC=0): eof[T=168, OC=0, ""]
Unwrapped lines:
Line(0, FSC=0) MACRO: hash[T=168, OC=0, "#"] identifier[T=168, OC=1, "define"] identifier[T=168, OC=8, "X"] l_paren[T=168, OC=9, "("] identifier[T=168, OC=10, "T"] r_paren[T=168, OC=11, ")"]
Line(1, FSC=0) MACRO: identifier[T=168, OC=13, "T"]
Line(0, FSC=0): void[T=168, OC=0, "void"] identifier[T=168, OC=5, "a"] l_paren[T=168, OC=6, "("] identifier[T=168, OC=7, "X"] l_paren[T=168, OC=8, "("] int[T=168, OC=9, "int"] r_paren[T=168, OC=12, ")"] star[T=168, OC=14, "*"] identifier[T=168, OC=15, "b"] r_paren[T=168, OC=16, ")"] l_brace[T=52, OC=18, "{"]
Line(0, FSC=0): r_brace[T=168, OC=19, "}"]
Line(0, FSC=0): eof[T=168, OC=0, ""]
Run 0...
Replacements for run 0:
Run 1...
Replacements for run 1:
File encoding: UTF8
Language: C
----
Next [0] Token: hash / #, Macro: 0
Peeking [1] Token: identifier / define, Macro: 0
Next [1] Token: identifier / define, Macro: 0
Next [2] Token: identifier / X, Macro: 0
Next [3] Token: l_paren / (, Macro: 0
Next [4] Token: identifier / T, Macro: 0
Next [5] Token: r_paren / ), Macro: 0
Next [6] Token: identifier / T, Macro: 0
Adding unwrapped line:
Line(0, FSC=0) MACRO: hash[T=168, OC=0, "#"] identifier[T=168, OC=1, "define"] identifier[T=168, OC=8, "X"] l_paren[T=168, OC=9, "("] identifier[T=168, OC=10, "T"] r_paren[T=168, OC=11, ")"]
Peeking [7] Token: void / void, Macro: 0
Next [7] Token: void / void, Macro: 0
Adding unwrapped line:
Line(1, FSC=0) MACRO: identifier[T=168, OC=13, "T"]
Next [8] Token: identifier / a, Macro: 0
Next [9] Token: l_paren / (, Macro: 0
Next [10] Token: identifier / X, Macro: 0
Getting Position: 10
Next [11] Token: l_paren / (, Macro: 0
Getting Position: 11
Next [12] Token: int / int, Macro: 0
Next [13] Token: r_paren / ), Macro: 0
Next [14] Token: star / *, Macro: 0
Macro call: X((int )
Inserting:
[20] Token: int / int, Macro: 1
[21] Token: eof / , Macro: 1
Jump from: 21 -> 14
At inserted token [20] Token: int / int, Macro: 1
Expanded: int
Next [14] Token: star / *, Macro: 0
Next [15] Token: identifier / b, Macro: 0
Next [16] Token: r_paren / ), Macro: 0
Next [17] Token: l_brace / {, Macro: 0
Peeking [18] Token: r_brace / }, Macro: 0
Getting Position: 17
Next [18] Token: r_brace / }, Macro: 0
Next [19] Token: eof / , Macro: 0
Setting Position: 17
Peeking [18] Token: r_brace / }, Macro: 0
Next [18] Token: r_brace / }, Macro: 0
Adding unwrapped line:
Line(0, FSC=0): void[T=168, OC=0, "void"] identifier[T=168, OC=5, "a"] l_paren[T=168, OC=6, "("] int[T=168, OC=9, "int"] star[T=168, OC=14, "*"] identifier[T=168, OC=15, "b"] r_paren[T=168, OC=16, ")"] l_brace[T=52, OC=18, "{"]
MCR: new line...
MCR: Token: void, Parent: , First: 1
ParentMap:
MCR: New parent:
-> void
MCR: Token: a, Parent: , First: 0
ParentMap:
MCR: New parent:
-> a
MCR: Token: (, Parent: , First: 0
ParentMap:
MCR: New parent:
-> (
MCR: Token: int, Parent: , First: 0
ParentMap:
MCR: New parent:
-> X
ParentLastToken:
-> (
ParentMap:
-> (
MCR: New parent: (
MacroCallLParen: (, OpenMacroParent: (
-> int
-> )
MCR: Token: *, Parent: , First: 0
ParentMap:
MCR: New parent:
-> *
MCR: Token: b, Parent: , First: 0
ParentMap:
MCR: New parent:
-> b
MCR: Token: ), Parent: , First: 0
ParentMap:
MCR: New parent:
-> )
MCR: Token: {, Parent: , First: 0
ParentMap:
MCR: New parent:
-> {
Finalizing reconstructed lines:
void a ( X (
int
) * b ) {
Adding unexpanded line:
Line(0, FSC=0): void[T=168, OC=0, "void"] identifier[T=168, OC=5, "a"] l_paren[T=168, OC=6, "("] identifier[T=168, OC=7, "X"] l_paren[T=168, OC=8, "("] int[T=168, OC=9, "int"] r_paren[T=168, OC=12, ")"] star[T=168, OC=14, "*"] identifier[T=168, OC=15, "b"] r_paren[T=168, OC=16, ")"] l_brace[T=52, OC=18, "{"]
Next [19] Token: eof / , Macro: 0
Adding unwrapped line:
Line(0, FSC=0): r_brace[T=168, OC=19, "}"]
Adding unwrapped line:
Line(0, FSC=0): eof[T=168, OC=0, ""]
Expanded lines:
Line(0, FSC=0) MACRO: hash[T=168, OC=0, "#"] identifier[T=168, OC=1, "define"] identifier[T=168, OC=8, "X"] l_paren[T=168, OC=9, "("] identifier[T=168, OC=10, "T"] r_paren[T=168, OC=11, ")"]
Line(1, FSC=0) MACRO: identifier[T=168, OC=13, "T"]
Line(0, FSC=0): void[T=168, OC=0, "void"] identifier[T=168, OC=5, "a"] l_paren[T=168, OC=6, "("] int[T=168, OC=9, "int"] star[T=168, OC=14, "*"] identifier[T=168, OC=15, "b"] r_paren[T=168, OC=16, ")"] l_brace[T=52, OC=18, "{"]
Line(0, FSC=0): r_brace[T=168, OC=19, "}"]
Line(0, FSC=0): eof[T=168, OC=0, ""]
Unwrapped lines:
Line(0, FSC=0) MACRO: hash[T=168, OC=0, "#"] identifier[T=168, OC=1, "define"] identifier[T=168, OC=8, "X"] l_paren[T=168, OC=9, "("] identifier[T=168, OC=10, "T"] r_paren[T=168, OC=11, ")"]
Line(1, FSC=0) MACRO: identifier[T=168, OC=13, "T"]
Line(0, FSC=0): void[T=168, OC=0, "void"] identifier[T=168, OC=5, "a"] l_paren[T=168, OC=6, "("] identifier[T=168, OC=7, "X"] l_paren[T=168, OC=8, "("] int[T=168, OC=9, "int"] r_paren[T=168, OC=12, ")"] star[T=168, OC=14, "*"] identifier[T=168, OC=15, "b"] r_paren[T=168, OC=16, ")"] l_brace[T=52, OC=18, "{"]
Line(0, FSC=0): r_brace[T=168, OC=19, "}"]
Line(0, FSC=0): eof[T=168, OC=0, ""]
Run 0...
Replacements for run 0:
Run 1...
Replacements for run 1:
File encoding: UTF8
Language: C
----
Next [0] Token: hash / #, Macro: 0
Peeking [1] Token: identifier / define, Macro: 0
Next [1] Token: identifier / define, Macro: 0
Next [2] Token: identifier / X, Macro: 0
Next [3] Token: l_paren / (, Macro: 0
Next [4] Token: identifier / T, Macro: 0
Next [5] Token: r_paren / ), Macro: 0
Next [6] Token: identifier / T, Macro: 0
Adding unwrapped line:
Line(0, FSC=0) MACRO: hash[T=168, OC=0, "#"] identifier[T=168, OC=1, "define"] identifier[T=168, OC=8, "X"] l_paren[T=168, OC=9, "("] identifier[T=168, OC=10, "T"] r_paren[T=168, OC=11, ")"]
Peeking [7] Token: void / void, Macro: 0
Next [7] Token: void / void, Macro: 0
Adding unwrapped line:
Line(1, FSC=0) MACRO: identifier[T=168, OC=13, "T"]
Next [8] Token: identifier / a, Macro: 0
Next [9] Token: l_paren / (, Macro: 0
Next [10] Token: identifier / X, Macro: 0
Getting Position: 10
Next [11] Token: l_paren / (, Macro: 0
Getting Position: 11
Next [12] Token: int / int, Macro: 0
Next [13] Token: r_paren / ), Macro: 0
Next [14] Token: star / *, Macro: 0
Macro call: X((int )
Inserting:
[20] Token: int / int, Macro: 1
[21] Token: eof / , Macro: 1
Jump from: 21 -> 14
At inserted token [20] Token: int / int, Macro: 1
Expanded: int
Next [14] Token: star / *, Macro: 0
Next [15] Token: identifier / b, Macro: 0
Next [16] Token: r_paren / ), Macro: 0
Next [17] Token: l_brace / {, Macro: 0
Peeking [18] Token: r_brace / }, Macro: 0
Getting Position: 17
Next [18] Token: r_brace / }, Macro: 0
Next [19] Token: eof / , Macro: 0
Setting Position: 17
Peeking [18] Token: r_brace / }, Macro: 0
Next [18] Token: r_brace / }, Macro: 0
Adding unwrapped line:
Line(0, FSC=0): void[T=168, OC=0, "void"] identifier[T=168, OC=5, "a"] l_paren[T=168, OC=6, "("] int[T=168, OC=9, "int"] star[T=168, OC=14, "*"] identifier[T=168, OC=15, "b"] r_paren[T=168, OC=16, ")"] l_brace[T=52, OC=18, "{"]
MCR: new line...
MCR: Token: void, Parent: , First: 1
ParentMap:
MCR: New parent:
-> void
MCR: Token: a, Parent: , First: 0
ParentMap:
MCR: New parent:
-> a
MCR: Token: (, Parent: , First: 0
ParentMap:
MCR: New parent:
-> (
MCR: Token: int, Parent: , First: 0
ParentMap:
MCR: New parent:
-> X
ParentLastToken:
-> (
ParentMap:
-> (
MCR: New parent: (
MacroCallLParen: (, OpenMacroParent: (
-> int
-> )
MCR: Token: *, Parent: , First: 0
ParentMap:
MCR: New parent:
-> *
MCR: Token: b, Parent: , First: 0
ParentMap:
MCR: New parent:
-> b
MCR: Token: ), Parent: , First: 0
ParentMap:
MCR: New parent:
-> )
MCR: Token: {, Parent: , First: 0
ParentMap:
MCR: New parent:
-> {
Finalizing reconstructed lines:
void a ( X (
int
) * b ) {
Adding unexpanded line:
Line(0, FSC=0): void[T=168, OC=0, "void"] identifier[T=168, OC=5, "a"] l_paren[T=168, OC=6, "("] identifier[T=168, OC=7, "X"] l_paren[T=168, OC=8, "("] int[T=168, OC=9, "int"] r_paren[T=168, OC=12, ")"] star[T=168, OC=14, "*"] identifier[T=168, OC=15, "b"] r_paren[T=168, OC=16, ")"] l_brace[T=52, OC=18, "{"]
Next [19] Token: eof / , Macro: 0
Adding unwrapped line:
Line(0, FSC=0): r_brace[T=168, OC=19, "}"]
Adding unwrapped line:
Line(0, FSC=0): eof[T=168, OC=0, ""]
Expanded lines:
Line(0, FSC=0) MACRO: hash[T=168, OC=0, "#"] identifier[T=168, OC=1, "define"] identifier[T=168, OC=8, "X"] l_paren[T=168, OC=9, "("] identifier[T=168, OC=10, "T"] r_paren[T=168, OC=11, ")"]
Line(1, FSC=0) MACRO: identifier[T=168, OC=13, "T"]
Line(0, FSC=0): void[T=168, OC=0, "void"] identifier[T=168, OC=5, "a"] l_paren[T=168, OC=6, "("] int[T=168, OC=9, "int"] star[T=168, OC=14, "*"] identifier[T=168, OC=15, "b"] r_paren[T=168, OC=16, ")"] l_brace[T=52, OC=18, "{"]
Line(0, FSC=0): r_brace[T=168, OC=19, "}"]
Line(0, FSC=0): eof[T=168, OC=0, ""]
Unwrapped lines:
Line(0, FSC=0) MACRO: hash[T=168, OC=0, "#"] identifier[T=168, OC=1, "define"] identifier[T=168, OC=8, "X"] l_paren[T=168, OC=9, "("] identifier[T=168, OC=10, "T"] r_paren[T=168, OC=11, ")"]
Line(1, FSC=0) MACRO: identifier[T=168, OC=13, "T"]
Line(0, FSC=0): void[T=168, OC=0, "void"] identifier[T=168, OC=5, "a"] l_paren[T=168, OC=6, "("] identifier[T=168, OC=7, "X"] l_paren[T=168, OC=8, "("] int[T=168, OC=9, "int"] r_paren[T=168, OC=12, ")"] star[T=168, OC=14, "*"] identifier[T=168, OC=15, "b"] r_paren[T=168, OC=16, ")"] l_brace[T=52, OC=18, "{"]
Line(0, FSC=0): r_brace[T=168, OC=19, "}"]
Line(0, FSC=0): eof[T=168, OC=0, ""]
Run 0...
AnnotatedTokens(L=0, P=0, T=7, C=0):
I=0 M=0 C=0 T=Unknown S=1 F=0 B=0 BK=0 P=0 Name=hash N=0 L=1 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text='#'
I=0 M=0 C=0 T=Unknown S=0 F=0 B=0 BK=0 P=23 Name=identifier N=0 L=7 PPK=2 FakeLParens= FakeRParens=0 II=0x55b337685d88 Text='define'
I=0 M=0 C=0 T=Unknown S=1 F=0 B=0 BK=0 P=23 Name=identifier N=0 L=9 PPK=2 FakeLParens= FakeRParens=0 II=0x55b337682bb8 Text='X'
I=0 M=0 C=0 T=Unknown S=0 F=0 B=0 BK=0 P=23 Name=l_paren N=0 L=10 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text='('
I=0 M=0 C=1 T=Unknown S=0 F=0 B=0 BK=0 P=59 Name=identifier N=1 L=11 PPK=2 FakeLParens= FakeRParens=0 II=0x55b337685de8 Text='T'
I=0 M=0 C=0 T=Unknown S=0 F=0 B=0 BK=0 P=43 Name=r_paren N=1 L=12 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text=')'
----
AnnotatedTokens(L=1, P=0, T=6, C=0):
I=1 M=0 C=0 T=Unknown S=1 F=0 B=0 BK=0 P=0 Name=identifier N=0 L=1 PPK=2 FakeLParens= FakeRParens=0 II=0x55b337685de8 Text='T'
----
AnnotatedTokens(L=0, P=0, T=6, C=0):
I=0 M=0 C=0 T=Unknown S=1 F=0 B=0 BK=0 P=0 Name=void N=0 L=4 PPK=2 FakeLParens= FakeRParens=0 II=0x55b33768fef0 Text='void'
I=0 M=0 C=1 T=FunctionDeclarationName S=1 F=0 B=0 BK=0 P=80 Name=identifier N=0 L=6 PPK=2 FakeLParens= FakeRParens=0 II=0x55b337685e18 Text='a'
I=0 M=0 C=0 T=FunctionDeclarationLParen S=0 F=0 B=0 BK=0 P=23 Name=l_paren N=0 L=7 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text='('
I=0 M=0 C=1 T=Unknown S=0 F=0 B=0 BK=0 P=140 Name=int N=1 L=10 PPK=2 FakeLParens= FakeRParens=0 II=0x55b33768fc10 Text='int'
I=0 M=0 C=1 T=PointerOrReference S=1 F=0 B=0 BK=0 P=230 Name=star N=1 L=12 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text='*'
I=0 M=0 C=1 T=StartOfName S=0 F=0 B=0 BK=0 P=240 Name=identifier N=1 L=13 PPK=2 FakeLParens= FakeRParens=0 II=0x55b337685e48 Text='b'
I=0 M=0 C=0 T=Unknown S=0 F=0 B=0 BK=0 P=43 Name=r_paren N=1 L=14 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text=')'
I=0 M=0 C=0 T=FunctionLBrace S=1 F=0 B=0 BK=1 P=23 Name=l_brace N=0 L=16 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text='{'
----
AnnotatedTokens(L=0, P=0, T=6, C=0):
I=0 M=0 C=0 T=Unknown S=1 F=0 B=0 BK=1 P=0 Name=r_brace N=0 L=1 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text='}'
----
AnnotatedTokens(L=0, P=0, T=6, C=0):
I=0 M=0 C=0 T=Unknown S=1 F=0 B=0 BK=0 P=0 Name=eof N=0 L=0 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text=''
----
Replacements for run 0:
Run 1...
AnnotatedTokens(L=0, P=0, T=7, C=0):
I=0 M=0 C=0 T=Unknown S=1 F=1 B=0 BK=0 P=0 Name=hash N=0 L=1 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text='#'
I=0 M=0 C=0 T=Unknown S=0 F=1 B=0 BK=0 P=23 Name=identifier N=0 L=7 PPK=2 FakeLParens= FakeRParens=0 II=0x55b337685d88 Text='define'
I=0 M=0 C=0 T=Unknown S=1 F=1 B=0 BK=0 P=23 Name=identifier N=0 L=9 PPK=2 FakeLParens= FakeRParens=0 II=0x55b337682bb8 Text='X'
I=0 M=0 C=0 T=Unknown S=0 F=1 B=0 BK=0 P=23 Name=l_paren N=0 L=10 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text='('
I=0 M=0 C=1 T=Unknown S=0 F=1 B=0 BK=0 P=59 Name=identifier N=1 L=11 PPK=2 FakeLParens= FakeRParens=0 II=0x55b337685de8 Text='T'
I=0 M=0 C=0 T=Unknown S=0 F=1 B=0 BK=0 P=43 Name=r_paren N=1 L=12 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text=')'
----
AnnotatedTokens(L=1, P=0, T=6, C=0):
I=1 M=0 C=0 T=Unknown S=1 F=1 B=0 BK=0 P=0 Name=identifier N=0 L=1 PPK=2 FakeLParens= FakeRParens=0 II=0x55b337685de8 Text='T'
----
AnnotatedTokens(L=0, P=0, T=6, C=0):
I=0 M=0 C=0 T=Unknown S=1 F=1 B=0 BK=0 P=0 Name=void N=0 L=4 PPK=2 FakeLParens= FakeRParens=0 II=0x55b33768fef0 Text='void'
I=0 M=0 C=1 T=FunctionDeclarationName S=1 F=1 B=0 BK=0 P=220 Name=identifier N=0 L=6 PPK=2 FakeLParens= FakeRParens=0 II=0x55b337685e18 Text='a'
I=0 M=0 C=0 T=Unknown S=0 F=1 B=0 BK=0 P=23 Name=l_paren N=0 L=7 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text='('
I=0 M=0 C=1 T=Unknown S=0 F=0 B=0 BK=0 P=59 Name=identifier N=1 L=8 PPK=2 FakeLParens=14/ FakeRParens=0 II=0x55b337685db8 Text='X'
I=0 M=0 C=0 T=Unknown S=0 F=0 B=0 BK=0 P=43 Name=l_paren N=1 L=9 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text='('
I=0 M=0 C=1 T=Unknown S=0 F=0 B=0 BK=0 P=79 Name=int N=2 L=12 PPK=2 FakeLParens= FakeRParens=0 II=0x55b33768fc10 Text='int'
I=0 M=0 C=0 T=Unknown S=0 F=0 B=0 BK=0 P=63 Name=r_paren N=2 L=13 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text=')'
I=0 M=0 C=0 T=BinaryOperator S=1 F=1 B=0 BK=0 P=54 Name=star N=1 L=15 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text='*'
I=0 M=0 C=1 T=Unknown S=0 F=1 B=0 BK=0 P=54 Name=identifier N=1 L=16 PPK=2 FakeLParens= FakeRParens=1 II=0x55b337685e48 Text='b'
I=0 M=0 C=0 T=Unknown S=0 F=1 B=0 BK=0 P=43 Name=r_paren N=1 L=17 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text=')'
I=0 M=0 C=0 T=FunctionLBrace S=1 F=1 B=0 BK=1 P=23 Name=l_brace N=0 L=19 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text='{'
----
AnnotatedTokens(L=0, P=0, T=6, C=0):
I=0 M=0 C=0 T=Unknown S=1 F=1 B=0 BK=1 P=0 Name=r_brace N=0 L=1 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text='}'
----
AnnotatedTokens(L=0, P=0, T=6, C=0):
I=0 M=0 C=0 T=Unknown S=1 F=1 B=0 BK=0 P=0 Name=eof N=0 L=0 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text=''
----
---
Penalty for line: 0
State: F|0|0|0 a
State: F|0|0|0 (
State: F|0|0|0 (|4|0|0 X
State: F|0|0|0 (|7|0|0 F|7|7|0 (
State: F|0|0|0 (|7|0|0 F|7|7|0 (|11|7|7 int
State: F|0|0|0 (|7|0|0 F|7|7|0 (|9|7|7 )
State: F|0|0|0 (|7|0|0 F|7|7|0 *
State: F|0|0|0 (|7|0|0 F|7|7|0 b
State: F|0|0|0 (|7|0|0 )
State: F|0|0|0 {
State: F|0|0|0 {|2|0|0 }
Total number of analyzed states: 14
---
Replacements for run 1:
#define X(T) T
void a(X(int) *b) {}
```
Log with -debug (buggy, case 2):
```
Args: bin/clang-format /tmp/c/test2.c -debug
Trying /tmp/c/.clang-format...
Using configuration file /tmp/c/.clang-format
File encoding: UTF8
Language: C
----
Next [0] Token: hash / #, Macro: 0
Peeking [1] Token: identifier / define, Macro: 0
Next [1] Token: identifier / define, Macro: 0
Next [2] Token: identifier / X, Macro: 0
Next [3] Token: l_paren / (, Macro: 0
Next [4] Token: identifier / T, Macro: 0
Next [5] Token: r_paren / ), Macro: 0
Next [6] Token: identifier / T, Macro: 0
Adding unwrapped line:
Line(0, FSC=0) MACRO: hash[T=168, OC=0, "#"] identifier[T=168, OC=1, "define"] identifier[T=168, OC=8, "X"] l_paren[T=168, OC=9, "("] identifier[T=168, OC=10, "T"] r_paren[T=168, OC=11, ")"]
Peeking [7] Token: void / void, Macro: 0
Next [7] Token: void / void, Macro: 0
Adding unwrapped line:
Line(1, FSC=0) MACRO: identifier[T=168, OC=13, "T"]
Next [8] Token: identifier / a, Macro: 0
Next [9] Token: l_paren / (, Macro: 0
Next [10] Token: identifier / X, Macro: 0
Getting Position: 10
Next [11] Token: l_paren / (, Macro: 0
Getting Position: 11
Next [12] Token: int / int, Macro: 0
Next [13] Token: r_paren / ), Macro: 0
Next [14] Token: star / *, Macro: 0
Macro call: X((int )
Inserting:
[20] Token: int / int, Macro: 1
[21] Token: eof / , Macro: 1
Jump from: 21 -> 14
At inserted token [20] Token: int / int, Macro: 1
Expanded: int
Next [14] Token: star / *, Macro: 0
Next [15] Token: identifier / b, Macro: 0
Next [16] Token: r_paren / ), Macro: 0
Next [17] Token: l_brace / {, Macro: 0
Peeking [18] Token: r_brace / }, Macro: 0
Getting Position: 17
Next [18] Token: r_brace / }, Macro: 0
Next [19] Token: eof / , Macro: 0
Setting Position: 17
Peeking [18] Token: r_brace / }, Macro: 0
Next [18] Token: r_brace / }, Macro: 0
Adding unwrapped line:
Line(0, FSC=0): void[T=168, OC=0, "void"] identifier[T=168, OC=5, "a"] l_paren[T=168, OC=6, "("] int[T=168, OC=10, "int"] star[T=168, OC=15, "*"] identifier[T=168, OC=16, "b"] r_paren[T=168, OC=17, ")"] l_brace[T=52, OC=19, "{"]
MCR: new line...
MCR: Token: void, Parent: , First: 1
ParentMap:
MCR: New parent:
-> void
MCR: Token: a, Parent: , First: 0
ParentMap:
MCR: New parent:
-> a
MCR: Token: (, Parent: , First: 0
ParentMap:
MCR: New parent:
-> (
MCR: Token: int, Parent: , First: 0
ParentMap:
MCR: New parent:
-> X
ParentLastToken:
-> (
ParentMap:
-> (
MCR: New parent: (
MacroCallLParen: (, OpenMacroParent: (
-> int
-> )
MCR: Token: *, Parent: , First: 0
ParentMap:
MCR: New parent:
-> *
MCR: Token: b, Parent: , First: 0
ParentMap:
MCR: New parent:
-> b
MCR: Token: ), Parent: , First: 0
ParentMap:
MCR: New parent:
-> )
MCR: Token: {, Parent: , First: 0
ParentMap:
MCR: New parent:
-> {
Finalizing reconstructed lines:
void a ( X (
int
) * b ) {
Adding unexpanded line:
Line(0, FSC=0): void[T=168, OC=0, "void"] identifier[T=168, OC=5, "a"] l_paren[T=168, OC=6, "("] identifier[T=168, OC=8, "X"] l_paren[T=168, OC=9, "("] int[T=168, OC=10, "int"] r_paren[T=168, OC=13, ")"] star[T=168, OC=15, "*"] identifier[T=168, OC=16, "b"] r_paren[T=168, OC=17, ")"] l_brace[T=52, OC=19, "{"]
Next [19] Token: eof / , Macro: 0
Adding unwrapped line:
Line(0, FSC=0): r_brace[T=168, OC=20, "}"]
Adding unwrapped line:
Line(0, FSC=0): eof[T=168, OC=0, ""]
Expanded lines:
Line(0, FSC=0) MACRO: hash[T=168, OC=0, "#"] identifier[T=168, OC=1, "define"] identifier[T=168, OC=8, "X"] l_paren[T=168, OC=9, "("] identifier[T=168, OC=10, "T"] r_paren[T=168, OC=11, ")"]
Line(1, FSC=0) MACRO: identifier[T=168, OC=13, "T"]
Line(0, FSC=0): void[T=168, OC=0, "void"] identifier[T=168, OC=5, "a"] l_paren[T=168, OC=6, "("] int[T=168, OC=10, "int"] star[T=168, OC=15, "*"] identifier[T=168, OC=16, "b"] r_paren[T=168, OC=17, ")"] l_brace[T=52, OC=19, "{"]
Line(0, FSC=0): r_brace[T=168, OC=20, "}"]
Line(0, FSC=0): eof[T=168, OC=0, ""]
Unwrapped lines:
Line(0, FSC=0) MACRO: hash[T=168, OC=0, "#"] identifier[T=168, OC=1, "define"] identifier[T=168, OC=8, "X"] l_paren[T=168, OC=9, "("] identifier[T=168, OC=10, "T"] r_paren[T=168, OC=11, ")"]
Line(1, FSC=0) MACRO: identifier[T=168, OC=13, "T"]
Line(0, FSC=0): void[T=168, OC=0, "void"] identifier[T=168, OC=5, "a"] l_paren[T=168, OC=6, "("] identifier[T=168, OC=8, "X"] l_paren[T=168, OC=9, "("] int[T=168, OC=10, "int"] r_paren[T=168, OC=13, ")"] star[T=168, OC=15, "*"] identifier[T=168, OC=16, "b"] r_paren[T=168, OC=17, ")"] l_brace[T=52, OC=19, "{"]
Line(0, FSC=0): r_brace[T=168, OC=20, "}"]
Line(0, FSC=0): eof[T=168, OC=0, ""]
Run 0...
Replacements for run 0:
Run 1...
Replacements for run 1:
File encoding: UTF8
Language: C
----
Next [0] Token: hash / #, Macro: 0
Peeking [1] Token: identifier / define, Macro: 0
Next [1] Token: identifier / define, Macro: 0
Next [2] Token: identifier / X, Macro: 0
Next [3] Token: l_paren / (, Macro: 0
Next [4] Token: identifier / T, Macro: 0
Next [5] Token: r_paren / ), Macro: 0
Next [6] Token: identifier / T, Macro: 0
Adding unwrapped line:
Line(0, FSC=0) MACRO: hash[T=168, OC=0, "#"] identifier[T=168, OC=1, "define"] identifier[T=168, OC=8, "X"] l_paren[T=168, OC=9, "("] identifier[T=168, OC=10, "T"] r_paren[T=168, OC=11, ")"]
Peeking [7] Token: void / void, Macro: 0
Next [7] Token: void / void, Macro: 0
Adding unwrapped line:
Line(1, FSC=0) MACRO: identifier[T=168, OC=13, "T"]
Next [8] Token: identifier / a, Macro: 0
Next [9] Token: l_paren / (, Macro: 0
Next [10] Token: identifier / X, Macro: 0
Getting Position: 10
Next [11] Token: l_paren / (, Macro: 0
Getting Position: 11
Next [12] Token: int / int, Macro: 0
Next [13] Token: r_paren / ), Macro: 0
Next [14] Token: star / *, Macro: 0
Macro call: X((int )
Inserting:
[20] Token: int / int, Macro: 1
[21] Token: eof / , Macro: 1
Jump from: 21 -> 14
At inserted token [20] Token: int / int, Macro: 1
Expanded: int
Next [14] Token: star / *, Macro: 0
Next [15] Token: identifier / b, Macro: 0
Next [16] Token: r_paren / ), Macro: 0
Next [17] Token: l_brace / {, Macro: 0
Peeking [18] Token: r_brace / }, Macro: 0
Getting Position: 17
Next [18] Token: r_brace / }, Macro: 0
Next [19] Token: eof / , Macro: 0
Setting Position: 17
Peeking [18] Token: r_brace / }, Macro: 0
Next [18] Token: r_brace / }, Macro: 0
Adding unwrapped line:
Line(0, FSC=0): void[T=168, OC=0, "void"] identifier[T=168, OC=5, "a"] l_paren[T=168, OC=6, "("] int[T=168, OC=10, "int"] star[T=168, OC=15, "*"] identifier[T=168, OC=16, "b"] r_paren[T=168, OC=17, ")"] l_brace[T=52, OC=19, "{"]
MCR: new line...
MCR: Token: void, Parent: , First: 1
ParentMap:
MCR: New parent:
-> void
MCR: Token: a, Parent: , First: 0
ParentMap:
MCR: New parent:
-> a
MCR: Token: (, Parent: , First: 0
ParentMap:
MCR: New parent:
-> (
MCR: Token: int, Parent: , First: 0
ParentMap:
MCR: New parent:
-> X
ParentLastToken:
-> (
ParentMap:
-> (
MCR: New parent: (
MacroCallLParen: (, OpenMacroParent: (
-> int
-> )
MCR: Token: *, Parent: , First: 0
ParentMap:
MCR: New parent:
-> *
MCR: Token: b, Parent: , First: 0
ParentMap:
MCR: New parent:
-> b
MCR: Token: ), Parent: , First: 0
ParentMap:
MCR: New parent:
-> )
MCR: Token: {, Parent: , First: 0
ParentMap:
MCR: New parent:
-> {
Finalizing reconstructed lines:
void a ( X (
int
) * b ) {
Adding unexpanded line:
Line(0, FSC=0): void[T=168, OC=0, "void"] identifier[T=168, OC=5, "a"] l_paren[T=168, OC=6, "("] identifier[T=168, OC=8, "X"] l_paren[T=168, OC=9, "("] int[T=168, OC=10, "int"] r_paren[T=168, OC=13, ")"] star[T=168, OC=15, "*"] identifier[T=168, OC=16, "b"] r_paren[T=168, OC=17, ")"] l_brace[T=52, OC=19, "{"]
Next [19] Token: eof / , Macro: 0
Adding unwrapped line:
Line(0, FSC=0): r_brace[T=168, OC=20, "}"]
Adding unwrapped line:
Line(0, FSC=0): eof[T=168, OC=0, ""]
Expanded lines:
Line(0, FSC=0) MACRO: hash[T=168, OC=0, "#"] identifier[T=168, OC=1, "define"] identifier[T=168, OC=8, "X"] l_paren[T=168, OC=9, "("] identifier[T=168, OC=10, "T"] r_paren[T=168, OC=11, ")"]
Line(1, FSC=0) MACRO: identifier[T=168, OC=13, "T"]
Line(0, FSC=0): void[T=168, OC=0, "void"] identifier[T=168, OC=5, "a"] l_paren[T=168, OC=6, "("] int[T=168, OC=10, "int"] star[T=168, OC=15, "*"] identifier[T=168, OC=16, "b"] r_paren[T=168, OC=17, ")"] l_brace[T=52, OC=19, "{"]
Line(0, FSC=0): r_brace[T=168, OC=20, "}"]
Line(0, FSC=0): eof[T=168, OC=0, ""]
Unwrapped lines:
Line(0, FSC=0) MACRO: hash[T=168, OC=0, "#"] identifier[T=168, OC=1, "define"] identifier[T=168, OC=8, "X"] l_paren[T=168, OC=9, "("] identifier[T=168, OC=10, "T"] r_paren[T=168, OC=11, ")"]
Line(1, FSC=0) MACRO: identifier[T=168, OC=13, "T"]
Line(0, FSC=0): void[T=168, OC=0, "void"] identifier[T=168, OC=5, "a"] l_paren[T=168, OC=6, "("] identifier[T=168, OC=8, "X"] l_paren[T=168, OC=9, "("] int[T=168, OC=10, "int"] r_paren[T=168, OC=13, ")"] star[T=168, OC=15, "*"] identifier[T=168, OC=16, "b"] r_paren[T=168, OC=17, ")"] l_brace[T=52, OC=19, "{"]
Line(0, FSC=0): r_brace[T=168, OC=20, "}"]
Line(0, FSC=0): eof[T=168, OC=0, ""]
Run 0...
Replacements for run 0:
Run 1...
Replacements for run 1:
File encoding: UTF8
Language: C
----
Next [0] Token: hash / #, Macro: 0
Peeking [1] Token: identifier / define, Macro: 0
Next [1] Token: identifier / define, Macro: 0
Next [2] Token: identifier / X, Macro: 0
Next [3] Token: l_paren / (, Macro: 0
Next [4] Token: identifier / T, Macro: 0
Next [5] Token: r_paren / ), Macro: 0
Next [6] Token: identifier / T, Macro: 0
Adding unwrapped line:
Line(0, FSC=0) MACRO: hash[T=168, OC=0, "#"] identifier[T=168, OC=1, "define"] identifier[T=168, OC=8, "X"] l_paren[T=168, OC=9, "("] identifier[T=168, OC=10, "T"] r_paren[T=168, OC=11, ")"]
Peeking [7] Token: void / void, Macro: 0
Next [7] Token: void / void, Macro: 0
Adding unwrapped line:
Line(1, FSC=0) MACRO: identifier[T=168, OC=13, "T"]
Next [8] Token: identifier / a, Macro: 0
Next [9] Token: l_paren / (, Macro: 0
Next [10] Token: identifier / X, Macro: 0
Getting Position: 10
Next [11] Token: l_paren / (, Macro: 0
Getting Position: 11
Next [12] Token: int / int, Macro: 0
Next [13] Token: r_paren / ), Macro: 0
Next [14] Token: star / *, Macro: 0
Macro call: X((int )
Inserting:
[20] Token: int / int, Macro: 1
[21] Token: eof / , Macro: 1
Jump from: 21 -> 14
At inserted token [20] Token: int / int, Macro: 1
Expanded: int
Next [14] Token: star / *, Macro: 0
Next [15] Token: identifier / b, Macro: 0
Next [16] Token: r_paren / ), Macro: 0
Next [17] Token: l_brace / {, Macro: 0
Peeking [18] Token: r_brace / }, Macro: 0
Getting Position: 17
Next [18] Token: r_brace / }, Macro: 0
Next [19] Token: eof / , Macro: 0
Setting Position: 17
Peeking [18] Token: r_brace / }, Macro: 0
Next [18] Token: r_brace / }, Macro: 0
Adding unwrapped line:
Line(0, FSC=0): void[T=168, OC=0, "void"] identifier[T=168, OC=5, "a"] l_paren[T=168, OC=6, "("] int[T=168, OC=10, "int"] star[T=168, OC=15, "*"] identifier[T=168, OC=16, "b"] r_paren[T=168, OC=17, ")"] l_brace[T=52, OC=19, "{"]
MCR: new line...
MCR: Token: void, Parent: , First: 1
ParentMap:
MCR: New parent:
-> void
MCR: Token: a, Parent: , First: 0
ParentMap:
MCR: New parent:
-> a
MCR: Token: (, Parent: , First: 0
ParentMap:
MCR: New parent:
-> (
MCR: Token: int, Parent: , First: 0
ParentMap:
MCR: New parent:
-> X
ParentLastToken:
-> (
ParentMap:
-> (
MCR: New parent: (
MacroCallLParen: (, OpenMacroParent: (
-> int
-> )
MCR: Token: *, Parent: , First: 0
ParentMap:
MCR: New parent:
-> *
MCR: Token: b, Parent: , First: 0
ParentMap:
MCR: New parent:
-> b
MCR: Token: ), Parent: , First: 0
ParentMap:
MCR: New parent:
-> )
MCR: Token: {, Parent: , First: 0
ParentMap:
MCR: New parent:
-> {
Finalizing reconstructed lines:
void a ( X (
int
) * b ) {
Adding unexpanded line:
Line(0, FSC=0): void[T=168, OC=0, "void"] identifier[T=168, OC=5, "a"] l_paren[T=168, OC=6, "("] identifier[T=168, OC=8, "X"] l_paren[T=168, OC=9, "("] int[T=168, OC=10, "int"] r_paren[T=168, OC=13, ")"] star[T=168, OC=15, "*"] identifier[T=168, OC=16, "b"] r_paren[T=168, OC=17, ")"] l_brace[T=52, OC=19, "{"]
Next [19] Token: eof / , Macro: 0
Adding unwrapped line:
Line(0, FSC=0): r_brace[T=168, OC=20, "}"]
Adding unwrapped line:
Line(0, FSC=0): eof[T=168, OC=0, ""]
Expanded lines:
Line(0, FSC=0) MACRO: hash[T=168, OC=0, "#"] identifier[T=168, OC=1, "define"] identifier[T=168, OC=8, "X"] l_paren[T=168, OC=9, "("] identifier[T=168, OC=10, "T"] r_paren[T=168, OC=11, ")"]
Line(1, FSC=0) MACRO: identifier[T=168, OC=13, "T"]
Line(0, FSC=0): void[T=168, OC=0, "void"] identifier[T=168, OC=5, "a"] l_paren[T=168, OC=6, "("] int[T=168, OC=10, "int"] star[T=168, OC=15, "*"] identifier[T=168, OC=16, "b"] r_paren[T=168, OC=17, ")"] l_brace[T=52, OC=19, "{"]
Line(0, FSC=0): r_brace[T=168, OC=20, "}"]
Line(0, FSC=0): eof[T=168, OC=0, ""]
Unwrapped lines:
Line(0, FSC=0) MACRO: hash[T=168, OC=0, "#"] identifier[T=168, OC=1, "define"] identifier[T=168, OC=8, "X"] l_paren[T=168, OC=9, "("] identifier[T=168, OC=10, "T"] r_paren[T=168, OC=11, ")"]
Line(1, FSC=0) MACRO: identifier[T=168, OC=13, "T"]
Line(0, FSC=0): void[T=168, OC=0, "void"] identifier[T=168, OC=5, "a"] l_paren[T=168, OC=6, "("] identifier[T=168, OC=8, "X"] l_paren[T=168, OC=9, "("] int[T=168, OC=10, "int"] r_paren[T=168, OC=13, ")"] star[T=168, OC=15, "*"] identifier[T=168, OC=16, "b"] r_paren[T=168, OC=17, ")"] l_brace[T=52, OC=19, "{"]
Line(0, FSC=0): r_brace[T=168, OC=20, "}"]
Line(0, FSC=0): eof[T=168, OC=0, ""]
Run 0...
AnnotatedTokens(L=0, P=0, T=7, C=0):
I=0 M=0 C=0 T=Unknown S=1 F=0 B=0 BK=0 P=0 Name=hash N=0 L=1 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text='#'
I=0 M=0 C=0 T=Unknown S=0 F=0 B=0 BK=0 P=23 Name=identifier N=0 L=7 PPK=2 FakeLParens= FakeRParens=0 II=0x5615da548d88 Text='define'
I=0 M=0 C=0 T=Unknown S=1 F=0 B=0 BK=0 P=23 Name=identifier N=0 L=9 PPK=2 FakeLParens= FakeRParens=0 II=0x5615da545bb8 Text='X'
I=0 M=0 C=0 T=Unknown S=0 F=0 B=0 BK=0 P=23 Name=l_paren N=0 L=10 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text='('
I=0 M=0 C=1 T=Unknown S=0 F=0 B=0 BK=0 P=59 Name=identifier N=1 L=11 PPK=2 FakeLParens= FakeRParens=0 II=0x5615da548de8 Text='T'
I=0 M=0 C=0 T=Unknown S=0 F=0 B=0 BK=0 P=43 Name=r_paren N=1 L=12 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text=')'
----
AnnotatedTokens(L=1, P=0, T=6, C=0):
I=1 M=0 C=0 T=Unknown S=1 F=0 B=0 BK=0 P=0 Name=identifier N=0 L=1 PPK=2 FakeLParens= FakeRParens=0 II=0x5615da548de8 Text='T'
----
AnnotatedTokens(L=0, P=0, T=6, C=0):
I=0 M=0 C=0 T=Unknown S=1 F=0 B=0 BK=0 P=0 Name=void N=0 L=4 PPK=2 FakeLParens= FakeRParens=0 II=0x5615da552ef0 Text='void'
I=0 M=0 C=1 T=FunctionDeclarationName S=1 F=0 B=0 BK=0 P=80 Name=identifier N=0 L=6 PPK=2 FakeLParens= FakeRParens=0 II=0x5615da548e18 Text='a'
I=0 M=0 C=0 T=FunctionDeclarationLParen S=0 F=0 B=0 BK=0 P=23 Name=l_paren N=0 L=7 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text='('
I=0 M=0 C=1 T=Unknown S=0 F=0 B=0 BK=0 P=140 Name=int N=1 L=10 PPK=2 FakeLParens= FakeRParens=0 II=0x5615da552c10 Text='int'
I=0 M=0 C=1 T=PointerOrReference S=1 F=0 B=0 BK=0 P=230 Name=star N=1 L=12 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text='*'
I=0 M=0 C=1 T=StartOfName S=0 F=0 B=0 BK=0 P=240 Name=identifier N=1 L=13 PPK=2 FakeLParens= FakeRParens=0 II=0x5615da548e48 Text='b'
I=0 M=0 C=0 T=Unknown S=0 F=0 B=0 BK=0 P=43 Name=r_paren N=1 L=14 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text=')'
I=0 M=0 C=0 T=FunctionLBrace S=1 F=0 B=0 BK=1 P=23 Name=l_brace N=0 L=16 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text='{'
----
AnnotatedTokens(L=0, P=0, T=6, C=0):
I=0 M=0 C=0 T=Unknown S=1 F=0 B=0 BK=1 P=0 Name=r_brace N=0 L=1 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text='}'
----
AnnotatedTokens(L=0, P=0, T=6, C=0):
I=0 M=0 C=0 T=Unknown S=1 F=0 B=0 BK=0 P=0 Name=eof N=0 L=0 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text=''
----
Replacements for run 0:
Run 1...
AnnotatedTokens(L=0, P=0, T=7, C=0):
I=0 M=0 C=0 T=Unknown S=1 F=1 B=0 BK=0 P=0 Name=hash N=0 L=1 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text='#'
I=0 M=0 C=0 T=Unknown S=0 F=1 B=0 BK=0 P=23 Name=identifier N=0 L=7 PPK=2 FakeLParens= FakeRParens=0 II=0x5615da548d88 Text='define'
I=0 M=0 C=0 T=Unknown S=1 F=1 B=0 BK=0 P=23 Name=identifier N=0 L=9 PPK=2 FakeLParens= FakeRParens=0 II=0x5615da545bb8 Text='X'
I=0 M=0 C=0 T=Unknown S=0 F=1 B=0 BK=0 P=23 Name=l_paren N=0 L=10 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text='('
I=0 M=0 C=1 T=Unknown S=0 F=1 B=0 BK=0 P=59 Name=identifier N=1 L=11 PPK=2 FakeLParens= FakeRParens=0 II=0x5615da548de8 Text='T'
I=0 M=0 C=0 T=Unknown S=0 F=1 B=0 BK=0 P=43 Name=r_paren N=1 L=12 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text=')'
----
AnnotatedTokens(L=1, P=0, T=6, C=0):
I=1 M=0 C=0 T=Unknown S=1 F=1 B=0 BK=0 P=0 Name=identifier N=0 L=1 PPK=2 FakeLParens= FakeRParens=0 II=0x5615da548de8 Text='T'
----
AnnotatedTokens(L=0, P=0, T=6, C=0):
I=0 M=0 C=0 T=Unknown S=1 F=1 B=0 BK=0 P=0 Name=void N=0 L=4 PPK=2 FakeLParens= FakeRParens=0 II=0x5615da552ef0 Text='void'
I=0 M=0 C=1 T=FunctionDeclarationName S=1 F=1 B=0 BK=0 P=220 Name=identifier N=0 L=6 PPK=2 FakeLParens= FakeRParens=0 II=0x5615da548e18 Text='a'
I=0 M=0 C=0 T=Unknown S=0 F=1 B=0 BK=0 P=23 Name=l_paren N=0 L=7 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text='('
I=0 M=0 C=1 T=Unknown S=1 F=0 B=0 BK=0 P=59 Name=identifier N=1 L=9 PPK=2 FakeLParens=14/ FakeRParens=0 II=0x5615da548db8 Text='X'
I=0 M=0 C=0 T=Unknown S=0 F=0 B=0 BK=0 P=43 Name=l_paren N=1 L=10 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text='('
I=0 M=0 C=1 T=Unknown S=0 F=0 B=0 BK=0 P=79 Name=int N=2 L=13 PPK=2 FakeLParens= FakeRParens=0 II=0x5615da552c10 Text='int'
I=0 M=0 C=0 T=Unknown S=0 F=0 B=0 BK=0 P=63 Name=r_paren N=2 L=14 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text=')'
I=0 M=0 C=0 T=BinaryOperator S=1 F=1 B=0 BK=0 P=54 Name=star N=1 L=16 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text='*'
I=0 M=0 C=1 T=Unknown S=0 F=1 B=0 BK=0 P=54 Name=identifier N=1 L=17 PPK=2 FakeLParens= FakeRParens=1 II=0x5615da548e48 Text='b'
I=0 M=0 C=0 T=Unknown S=0 F=1 B=0 BK=0 P=43 Name=r_paren N=1 L=18 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text=')'
I=0 M=0 C=0 T=FunctionLBrace S=1 F=1 B=0 BK=1 P=23 Name=l_brace N=0 L=20 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text='{'
----
AnnotatedTokens(L=0, P=0, T=6, C=0):
I=0 M=0 C=0 T=Unknown S=1 F=1 B=0 BK=1 P=0 Name=r_brace N=0 L=1 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text='}'
----
AnnotatedTokens(L=0, P=0, T=6, C=0):
I=0 M=0 C=0 T=Unknown S=1 F=1 B=0 BK=0 P=0 Name=eof N=0 L=0 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text=''
----
---
Penalty for line: 0
State: F|0|0|0 a
State: F|0|0|0 (
State: F|0|0|0 (|4|0|0 X
State: F|0|0|0 (|8|0|0 F|8|8|0 (
State: F|0|0|0 (|8|0|0 F|8|8|0 (|12|8|8 int
State: F|0|0|0 (|8|0|0 F|8|8|0 (|10|8|8 )
State: F|0|0|0 (|8|0|0 F|8|8|0 *
State: F|0|0|0 (|8|0|0 F|8|8|0 b
State: F|0|0|0 (|8|0|0 )
State: F|0|0|0 {
State: F|0|0|0 {|2|0|0 }
Total number of analyzed states: 14
---
Replacements for run 1:
#define X(T) T
void a( X(int) *b) {}
```
Contributor guide
Research direction
Reproduce the issue with the provided .clang-format and test.c inputs, running clang-format on both cases and comparing the whitespace before X. Trace the macro expansion and formatting path, then verify that the extra space is removed while the already-correct case remains unchanged.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- c
- Domain
- tooling
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 38/100