<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Tue, Dec 16, 2014 at 1:47 AM, Stephan Bergmann <span dir="ltr"><<a href="mailto:sbergman@redhat.com" target="_blank">sbergman@redhat.com</a>></span> wrote:<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Is there any update on this?</blockquote><div><br></div><div>Please move the attribute to buildImplicitRecord; this attribute should be applied to all implicitly-declared record types. Also, please reformat the patch to 80 columns and add a testcase.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">
On 07/09/2014 10:37 AM, Alp Toker wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On 09/07/2014 11:29, Alp Toker wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On 09/07/2014 09:55, Stephan Bergmann wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
ping<br>
<br>
On 06/25/2014 05:45 PM, Stephan Bergmann wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I stumbled across this on Linux with -fvisibility=hidden when<br>
-fsanitize=function reported a false positive for an indirect call to a<br>
function with a va_list (aka __builtin_va_list, aka __va_list_tag<br>
(*)[1]) parameter.  Because __va_list_tag was considered hidden, the<br>
RTTI for the function's type was not exported from the two shared<br>
libraries involved, so the equality check failed.<br>
<br>
This would apparently also need to be fixed in the other<br>
Create*BuiltinVaListDecl variants, but I'm not sure (a) whether the<br>
added const_cast is really deemed appropriate here (though I guess so,<br>
given the large number of existing similar const_casts across<br>
ASTContext.cpp), and (b) what the preferred way would be to break that<br>
long line. ;)<br>
</blockquote></blockquote>
<br>
Hi Stephan,<br>
<br>
I wrote the buildImplicitRecord() utility, and in principle the<br>
attribute could be added centrally to that function -- if these are<br>
the semantics we want for most built-in types, as you suggest, it<br>
makes sense to centralize the decision.<br>
<br>
Another option would be to calculate the special linkage in<br>
computeLVForDecl() instead of using an attribute, but it doesn't<br>
really matter either way I think as the result is the same.<br>
<br>
The bigger question is whether (1) default visibility is correct for<br>
all built-in types currently being generated by buildImplicitRecord()<br>
and (2) whether this is a valid choice for all targets we support<br>
including MSVC drop-in compatibility mode.<br>
<br>
To help answer question (1), the affected built-in types would be:<br>
<br>
lib/AST/ASTContext.cpp:    Float128StubDecl =<br>
buildImplicitRecord("__<u></u>float128");<br>
lib/AST/ASTContext.cpp:    CFConstantStringTypeDecl =<br>
buildImplicitRecord("<u></u>NSConstantString");<br>
lib/AST/ASTContext.cpp:    RecordDecl *ObjCSuperTypeDecl =<br>
buildImplicitRecord("objc_<u></u>super");<br>
lib/AST/ASTContext.cpp:  RD = buildImplicitRecord("__block_<u></u>descriptor");<br>
lib/AST/ASTContext.cpp:  RD =<br>
buildImplicitRecord("__block_<u></u>descriptor_withcopydispose");<br>
lib/AST/ASTContext.cpp:  RecordDecl *VaListTagDecl =<br>
Context->buildImplicitRecord("<u></u>__va_list");<br>
lib/AST/ASTContext.cpp:  VaListTagDecl =<br>
Context->buildImplicitRecord("<u></u>__va_list_tag");<br>
lib/AST/ASTContext.cpp:  VaListTagDecl =<br>
Context->buildImplicitRecord("<u></u>__va_list_tag");<br>
lib/AST/ASTContext.cpp:  RecordDecl *VaListDecl =<br>
Context->buildImplicitRecord("<u></u>__va_list");<br>
lib/AST/ASTContext.cpp:  VaListTagDecl =<br>
Context->buildImplicitRecord("<u></u>__va_list_tag");<br>
lib/CodeGen/CodeGenModule.cpp:    RecordDecl *D =<br>
Context.buildImplicitRecord("_<u></u>_builtin_NSString");<br>
lib/CodeGen/CodeGenModule.cpp:    RecordDecl *D =<br>
Context.buildImplicitRecord("_<u></u>_objcFastEnumerationState");<br>
lib/Sema/Sema.cpp:<br>
PushOnScopeChains(Context.<u></u>buildImplicitRecord("type_<u></u>info", TTK_Class),<br>
<br>
</blockquote>
<br>
There are also the implicit typedefs -- I don't know what the<br>
visibility/export deal is for those:<br>
<br>
<br>
lib/AST/ASTContext.cpp:    Int128Decl = buildImplicitTypedef(Int128Ty,<br>
"__int128_t");<br>
lib/AST/ASTContext.cpp:    UInt128Decl =<br>
buildImplicitTypedef(<u></u>UnsignedInt128Ty, "__uint128_t");<br>
lib/AST/ASTContext.cpp:        buildImplicitTypedef(<u></u>getObjCIdType(),<br>
"instancetype");<br>
lib/AST/ASTContext.cpp:    ObjCIdDecl = buildImplicitTypedef(T, "id");<br>
lib/AST/ASTContext.cpp:    ObjCSelDecl = buildImplicitTypedef(T, "SEL");<br>
lib/AST/ASTContext.cpp:    ObjCClassDecl = buildImplicitTypedef(T,<br>
"Class");<br>
lib/AST/ASTContext.cpp:  return Context->buildImplicitTypedef(<u></u>T,<br>
"__builtin_va_list");<br>
lib/AST/ASTContext.cpp:  return Context->buildImplicitTypedef(<u></u>T,<br>
"__builtin_va_list");<br>
lib/AST/ASTContext.cpp:  return<br>
Context->buildImplicitTypedef(<u></u>VaListTagType, "__builtin_va_list");<br>
lib/AST/ASTContext.cpp: Context->buildImplicitTypedef(<u></u>VaListTagType,<br>
"__va_list_tag");<br>
lib/AST/ASTContext.cpp:  return<br>
Context->buildImplicitTypedef(<u></u>VaListTagArrayType, "__builtin_va_list");<br>
lib/AST/ASTContext.cpp: Context->buildImplicitTypedef(<u></u>VaListTagType,<br>
"__va_list_tag");<br>
lib/AST/ASTContext.cpp:  return<br>
Context->buildImplicitTypedef(<u></u>VaListTagArrayType, "__builtin_va_list");<br>
lib/AST/ASTContext.cpp:  return<br>
Context->buildImplicitTypedef(<u></u>IntArrayType, "__builtin_va_list");<br>
lib/AST/ASTContext.cpp:  return Context->buildImplicitTypedef(<u></u>T,<br>
"__builtin_va_list");<br>
lib/AST/ASTContext.cpp: Context->buildImplicitTypedef(<u></u>VaListTagType,<br>
"__va_list_tag");<br>
lib/AST/ASTContext.cpp:  return<br>
Context->buildImplicitTypedef(<u></u>VaListTagArrayType, "__builtin_va_list");<br>
lib/Sema/Sema.cpp: PushOnScopeChains(Context.<u></u>buildImplicitTypedef(T,<br>
Name), TUScope);<br>
<br>
Alp.<br>
<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I'll need help answering those questions from linkage/visibility folks<br>
on the list before going forward with a change like this.<br>
<br>
Thanks<br>
Alp.<br>
</blockquote></blockquote></div></div><div class="HOEnZb"><div class="h5">
______________________________<u></u>_________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu" target="_blank">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/<u></u>mailman/listinfo/cfe-commits</a><br>
</div></div></blockquote></div></div></div>