]> granicus.if.org Git - clang/commitdiff
Add documentation for the transparent_union attribute
authorAlex Lorenz <arphaman@gmail.com>
Thu, 27 Oct 2016 13:51:30 +0000 (13:51 +0000)
committerAlex Lorenz <arphaman@gmail.com>
Thu, 27 Oct 2016 13:51:30 +0000 (13:51 +0000)
Differential Revision: https://reviews.llvm.org/D25995

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@285292 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/Attr.td
include/clang/Basic/AttrDocs.td

index 2855207b4b6e25898b307f037be6820e5bc65854..3376f640a12743ac71857f1be5e47bec670da322 100644 (file)
@@ -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];
 }
 
index b62ac7cf2a2a7a6f3d3de4f2da7c7acd50b1274c..44e0a8e400c419d57023d85bec71d1a5722a169e 100644 (file)
@@ -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++.
+  }];
+}