From: Alex Lorenz Date: Thu, 27 Oct 2016 13:51:30 +0000 (+0000) Subject: Add documentation for the transparent_union attribute X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=32adf66f72945d7155cbffebde4f06a2d7911782;p=clang Add documentation for the transparent_union attribute Differential Revision: https://reviews.llvm.org/D25995 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@285292 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/Attr.td b/include/clang/Basic/Attr.td index 2855207b4b..3376f640a1 100644 --- a/include/clang/Basic/Attr.td +++ b/include/clang/Basic/Attr.td @@ -1542,7 +1542,7 @@ def Target : InheritableAttr { def TransparentUnion : InheritableAttr { let Spellings = [GCC<"transparent_union">]; // let Subjects = SubjectList<[Record, TypedefName]>; - let Documentation = [Undocumented]; + let Documentation = [TransparentUnionDocs]; let LangOpts = [COnly]; } diff --git a/include/clang/Basic/AttrDocs.td b/include/clang/Basic/AttrDocs.td index b62ac7cf2a..44e0a8e400 100644 --- a/include/clang/Basic/AttrDocs.td +++ b/include/clang/Basic/AttrDocs.td @@ -2649,3 +2649,21 @@ Conversely, ``__attribute__((xray_never_instrument))`` or ``[[clang::xray_never_ If a function has neither of these attributes, they become subject to the XRay heuristics used to determine whether a function should be instrumented or otherwise. }]; } + +def TransparentUnionDocs : Documentation { + let Category = DocCatType; + let Content = [{ +This attribute can be applied to a union to change the behaviour of calls to +functions that have an argument with a transparent union type. The compiler +behaviour is changed in the following manner: + +- A value whose type is any member of the transparent union can be passed as an +argument without the need to cast that value. + +- The argument is passed to the function using the calling convention of the +first member of the transparent union. Consequently, all the members of the +transparent union should have the same calling convention as its first member. + +Transparent unions are not supported in C++. + }]; +}