<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body dir="auto">
Clang does not use this parameter as it is not required. All the required initialization can be performed using only the first ctor parameter.<br>
<br>
<div id="AppleMailSignature" dir="ltr">Best regards,
<div>Alexey Bataev</div>
</div>
<div dir="ltr"><br>
20 дек. 2018 г., в 17:24, Simone Atzeni via cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a>> написал(а):<br>
<br>
</div>
<blockquote type="cite">
<div dir="ltr">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
<div class="WordSection1">
<p class="MsoNormal">Hi guys,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I am having some trouble making clang++ generate a call to `__kmpc_threadprivate_register` where the copy constructor is not NULL.<o:p></o:p></p>
<p class="MsoNormal">Looking at the generated LLVM IR it seems that clang approach, not matter how an object (declared as OpenMP threadprivate) is initialized, it will always generate a `__kmpc_global_ctor` and pass that to the ctor arg of ` __kmpc_threadprivate_register`.<o:p></o:p></p>
<p class="MsoNormal">The `__kmpc_global_ctor` will then do the object initialization in whatever way is specified by the program.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">For example, in the C++ program attached, we have an object `x` of class `myclass` initialized with another object `a` of type `myclass`, so the copy constructor of `myclass` will be called to initialize the instance of x.<o:p></o:p></p>
<p class="MsoNormal">Then x is declared as `omp threadprivate`.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">In the LLVM IR (also attached, I put only the interesting LLVM IR) there is a `__kmpc_global_ctor_` which calls inside the copy constructor. The `__kmpc_global_ctor_` is passed to the kmpc function `__kmpc_threadprivate_register` as ctor
 arg, while NULL is passed in the cctor arg position.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">My question is, is this an implementation choice or there is actually a way to make clang pass a copy constructor as a argument to `__kmpc_threadprivate_register`?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Maybe I am writing the wrong example and I am missing some knowledge about how C++ OpenMP threadprivate is supposed to work.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Thank you!<o:p></o:p></p>
<p class="MsoNormal">Simone<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<hr>
</div>
<div>This email message is for the sole use of the intended recipient(s) and may contain confidential information.  Any unauthorized review, use, disclosure or distribution is prohibited.  If you are not the intended recipient, please contact the sender by
 reply email and destroy all copies of the original message. </div>
<div>
<hr>
</div>
</div>
</blockquote>
<blockquote type="cite">
<div dir="ltr"><threadprivate_class_cctor.cpp></div>
</blockquote>
<blockquote type="cite">
<div dir="ltr"><threadprivate_class_cctor.ll></div>
</blockquote>
</body>
</html>