Skip to content

Commit d78fcb5

Browse files
committed
Bug 1935345 - [1/1] add AttributeMacros to .clang-format r=sylvestre
C++ technically allows the construct `struct foo bar{}` as an initialization: "struct foo" (a C-ism) is the type name, while "bar" is the variable name and "{}" is the brace-initialization. This construct should be formatted in a completely different way than the type-declaration `struct FOO bar {}`: here "FOO" is a macro that expands to an `__attribute__((...)))` definition or a comment, "bar" is the type name, and "{}" is the class body. These constructs are formally ambiguous at the level of a code formatter without access to macro-expansion and the like. Unfortunately, after years of assuming that the intended construct -- common in C++ codebases like, say, Gecko -- is the latter, clang-format has suddenly decided to assume instead that it's the former. [1] To preserve the previous formatter behavior, add the `AttributeMacros` option to our `.clang-format`, starting it off with a list of all the attribute-macro names from mfbt/Attributes.h which are marked as applying to classes. [1] llvm/llvm-project#94184 Differential Revision: https://phabricator.services.mozilla.com/D231824
1 parent 4f9d1e7 commit d78fcb5

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

.clang-format

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,31 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END_INHERITED|\
2424
NS_IMPL_CYCLE_COLLECTION_UNLINK_END_INHERITED|\
2525
NS_QUERYFRAME_TAIL.*$"
2626

27+
# Attribute macros used in classes. Workaround for behavior noted at
28+
# https://github.com/llvm/llvm-project/issues/94184.
29+
AttributeMacros: [
30+
MOZ_STATIC_CLASS,
31+
MOZ_STATIC_LOCAL_CLASS,
32+
MOZ_STACK_CLASS,
33+
MOZ_NONHEAP_CLASS,
34+
MOZ_HEAP_CLASS,
35+
MOZ_NON_TEMPORARY_CLASS,
36+
MOZ_TEMPORARY_CLASS,
37+
MOZ_RAII,
38+
MOZ_ONLY_USED_TO_AVOID_STATIC_CONSTRUCTORS,
39+
MOZ_TRIVIAL_CTOR_DTOR,
40+
MOZ_IS_REFPTR,
41+
MOZ_IS_SMARTPTR_TO_REFCOUNTED,
42+
MOZ_NEEDS_NO_VTABLE_TYPE,
43+
MOZ_NON_MEMMOVABLE,
44+
MOZ_NEEDS_MEMMOVABLE_TYPE,
45+
MOZ_NEEDS_MEMMOVABLE_MEMBERS,
46+
MOZ_INHERIT_TYPE_ANNOTATIONS_FROM_TEMPLATE_ARGS,
47+
MOZ_NON_PARAM,
48+
MOZ_NON_AUTOABLE
49+
]
50+
51+
2752
SortIncludes: false
2853
IndentPPDirectives: AfterHash
2954
StatementMacros: [MARKUPMAP, ASSERT_TRUE, ASSERT_FALSE, TEST, CHECK]

0 commit comments

Comments
 (0)