Issue 172804
Summary [clang-format] incorrectly inserts newline and changes indentation in designated initializers
Labels clang-format
Assignees
Reporter 89yanyu
    **Description:**
When using clang-format with Google style, the formatter unexpectedly inserts a newline between `.x =` and `{` in designated initializers, and changes the indentation from 2 spaces to 4 spaces. This behavior seems inconsistent with the expected formatting.

**clang-format version:**
clang-format version 21.1.6 (https://github.com/llvm/llvm-project a832a5222e489298337fbb5876f8dcaf072c5cca)

**Configuration:**
```bash
-style='{ Language: Cpp, BasedOnStyle: Google }'
```

**Input code:**
```c
struct T {
  struct {
    int y;
    int z;
  } x;
};

struct T t = {
  .x = {
    .y = 0,
    .z = 1,
  },
};
```

**Actual output after formatting:**
```c
struct T {
  struct {
    int y;
    int z;
  } x;
};

struct T t = {
    .x =
        {
            .y = 0,
 .z = 1,
        },
};
```

**Expected behavior:**
The formatting should either maintain the original code structure or follow a more reasonable formatting pattern. The current output introduces unnecessary line breaks and inconsistent indentation.

Interestingly, when adding `BreakBeforeBinaryOperators: All` to the configuration, the code maintains its original format:

**Working configuration:**
```bash
-style='{ Language: Cpp, BasedOnStyle: Google, BreakBeforeBinaryOperators: All }'
```

**Output with working configuration (maintains original format):**
```c
struct T {
  struct {
    int y;
    int z;
  } x;
};

struct T t = {
  .x = {
    .y = 0,
    .z = 1,
 },
};
```

The issue appears to be related to how clang-format handles the `=` operator in designated initializers when using the Google style base.

_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to