[clang-format] Don't wrap struct return types as structs
authorEmilia Dreamer <emilia@rymiel.space>
Sun, 26 Mar 2023 01:38:42 +0000 (04:38 +0300)
committerEmilia Dreamer <emilia@rymiel.space>
Sun, 26 Mar 2023 01:38:52 +0000 (04:38 +0300)
commita8d2bff290e1b86b4bca4007493205b4878c4f68
treeec6edb9a6cdf3f27e52b2faa93e9c59e4449dd6f
parent5409fb38372dbf65a94725ccefab2b993fbb7a9b
[clang-format] Don't wrap struct return types as structs

When using BraceWrapping.AfterClass or BraceWrapping.AfterStruct, the
token annotator relies on the first token of the line to determine if
we're dealing with a struct or class, however, this check is faulty if
it's actually a function with an elaborated struct/class return type, as
is common in C.

This patch skips the check if the brace is already annotated as
FunctionLBrace, in which case we already know it's a function and should
be treated as such.

Fixes https://github.com/llvm/llvm-project/issues/58527

Reviewed By: HazardyKnusperkeks, owenpan

Differential Revision: https://reviews.llvm.org/D146281
clang/lib/Format/TokenAnnotator.cpp
clang/unittests/Format/FormatTest.cpp