arphaman created this revision. arphaman added a reviewer: aaron.ballman. arphaman added a subscriber: cfe-commits. arphaman set the repository for this revision to rL LLVM.
This patch adds a bit of documentation for the `transparent_union` attribute. Repository: rL LLVM https://reviews.llvm.org/D25995 Files: include/clang/Basic/Attr.td include/clang/Basic/AttrDocs.td Index: include/clang/Basic/AttrDocs.td =================================================================== --- include/clang/Basic/AttrDocs.td +++ include/clang/Basic/AttrDocs.td @@ -2649,3 +2649,21 @@ 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++. + }]; +} Index: include/clang/Basic/Attr.td =================================================================== --- include/clang/Basic/Attr.td +++ include/clang/Basic/Attr.td @@ -1542,7 +1542,7 @@ def TransparentUnion : InheritableAttr { let Spellings = [GCC<"transparent_union">]; // let Subjects = SubjectList<[Record, TypedefName]>; - let Documentation = [Undocumented]; + let Documentation = [TransparentUnionDocs]; let LangOpts = [COnly]; }
Index: include/clang/Basic/AttrDocs.td =================================================================== --- include/clang/Basic/AttrDocs.td +++ include/clang/Basic/AttrDocs.td @@ -2649,3 +2649,21 @@ 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++. + }]; +} Index: include/clang/Basic/Attr.td =================================================================== --- include/clang/Basic/Attr.td +++ include/clang/Basic/Attr.td @@ -1542,7 +1542,7 @@ def TransparentUnion : InheritableAttr { let Spellings = [GCC<"transparent_union">]; // let Subjects = SubjectList<[Record, TypedefName]>; - let Documentation = [Undocumented]; + let Documentation = [TransparentUnionDocs]; let LangOpts = [COnly]; }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits