<div dir="ltr">Could it cause this use-after-free reported by ASan?<div><br></div><div><a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__lab.llvm.org-3A8011_builders_sanitizer-2Dx86-5F64-2Dlinux-2Dfast_builds_5169_steps_check-2Dclang-2520asan_logs_stdio&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=BSqEv9KvKMW_Ob8SyngJ70KdZISM_ASROnREeq0cCxk&m=Ap8PTRCUbugTmqBx32Fxl-UyIy_owqBI-xguN98n85c&s=NAoUaOPT0g7jAskk7ufUrU9UM6xSjMcx5A89hoWP-eo&e=">http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-fast/builds/5169/steps/check-clang%20asan/logs/stdio</a><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jun 30, 2015 at 1:19 PM, Peter Collingbourne <span dir="ltr"><<a href="mailto:peter@pcc.me.uk" target="_blank">peter@pcc.me.uk</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">This looks more like r241103. David is working on a fix.<br>
<div class="HOEnZb"><div class="h5"><br>
On Tue, Jun 30, 2015 at 01:10:13PM -0700, Nico Weber wrote:<br>
> It looks like this breaks building base.dll in the Chromium project:<br>
> <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__code.google.com_p_chromium_issues_detail-3Fid-3D505916&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=BSqEv9KvKMW_Ob8SyngJ70KdZISM_ASROnREeq0cCxk&m=Ap8PTRCUbugTmqBx32Fxl-UyIy_owqBI-xguN98n85c&s=QiLEgilSkIO184ljn7JTovepkdBaRTX2FwJ8frV2KEw&e=" rel="noreferrer" target="_blank">http://code.google.com/p/chromium/issues/detail?id=505916</a><br>
><br>
> On Tue, Jun 30, 2015 at 12:07 PM, Peter Collingbourne <<a href="mailto:peter@pcc.me.uk">peter@pcc.me.uk</a>><br>
> wrote:<br>
><br>
> > Author: pcc<br>
> > Date: Tue Jun 30 14:07:26 2015<br>
> > New Revision: 241102<br>
> ><br>
> > URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject-3Frev-3D241102-26view-3Drev&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=BSqEv9KvKMW_Ob8SyngJ70KdZISM_ASROnREeq0cCxk&m=Ap8PTRCUbugTmqBx32Fxl-UyIy_owqBI-xguN98n85c&s=fKigu_DbLLVmsTy3Br5oIbV7Gn9bZYL4ohgL_nTSgPQ&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=241102&view=rev</a><br>
> > Log:<br>
> > CodeGen: Assign an appropriate comdat to thunks.<br>
> ><br>
> > Previously we were not assigning a comdat to thunks in the Microsoft ABI,<br>
> > which would have required us to emit these functions outside of a comdat.<br>
> > (Due to an inconsistency in how we were emitting objects, we were getting<br>
> > this<br>
> > right most of the time, but only when compiling with function sections.)<br>
> > This<br>
> > code generator change causes us to create a comdat for each thunk.<br>
> ><br>
> > Differential Revision: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__reviews.llvm.org_D10829&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=BSqEv9KvKMW_Ob8SyngJ70KdZISM_ASROnREeq0cCxk&m=Ap8PTRCUbugTmqBx32Fxl-UyIy_owqBI-xguN98n85c&s=w73hvBEI9temsiVZAFWN0XOASOX9VbV6aTvmKZSCJCY&e=" rel="noreferrer" target="_blank">http://reviews.llvm.org/D10829</a><br>
> ><br>
> > Modified:<br>
> >     cfe/trunk/lib/CodeGen/CGVTables.cpp<br>
> >     cfe/trunk/test/CodeGenCXX/microsoft-abi-thunks.cpp<br>
> ><br>
> > Modified: cfe/trunk/lib/CodeGen/CGVTables.cpp<br>
> > URL:<br>
> > <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_lib_CodeGen_CGVTables.cpp-3Frev-3D241102-26r1-3D241101-26r2-3D241102-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=BSqEv9KvKMW_Ob8SyngJ70KdZISM_ASROnREeq0cCxk&m=Ap8PTRCUbugTmqBx32Fxl-UyIy_owqBI-xguN98n85c&s=uX17YLWpsYvwwvtIIq1cETkkLfS6BsD1bnVwyCuDm2w&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGVTables.cpp?rev=241102&r1=241101&r2=241102&view=diff</a><br>
> ><br>
> > ==============================================================================<br>
> > --- cfe/trunk/lib/CodeGen/CGVTables.cpp (original)<br>
> > +++ cfe/trunk/lib/CodeGen/CGVTables.cpp Tue Jun 30 14:07:26 2015<br>
> > @@ -378,9 +378,6 @@ void CodeGenFunction::GenerateThunk(llvm<br>
> >    // Set the right linkage.<br>
> >    CGM.setFunctionLinkage(GD, Fn);<br>
> ><br>
> > -  if (CGM.supportsCOMDAT() && Fn->isWeakForLinker())<br>
> > -    Fn->setComdat(CGM.getModule().getOrInsertComdat(Fn->getName()));<br>
> > -<br>
> >    // Set the right visibility.<br>
> >    const CXXMethodDecl *MD = cast<CXXMethodDecl>(GD.getDecl());<br>
> >    setThunkVisibility(CGM, MD, Thunk, Fn);<br>
> > @@ -450,17 +447,18 @@ void CodeGenVTables::emitThunk(GlobalDec<br>
> >      // expensive/sucky at the moment, so don't generate the thunk unless<br>
> >      // we have to.<br>
> >      // FIXME: Do something better here; GenerateVarArgsThunk is extremely<br>
> > ugly.<br>
> > -    if (!UseAvailableExternallyLinkage) {<br>
> > -      CodeGenFunction(CGM).GenerateVarArgsThunk(ThunkFn, FnInfo, GD,<br>
> > Thunk);<br>
> > -      CGM.getCXXABI().setThunkLinkage(ThunkFn, ForVTable, GD,<br>
> > -                                      !Thunk.Return.isEmpty());<br>
> > -    }<br>
> > +    if (UseAvailableExternallyLinkage)<br>
> > +      return;<br>
> > +    CodeGenFunction(CGM).GenerateVarArgsThunk(ThunkFn, FnInfo, GD, Thunk);<br>
> >    } else {<br>
> >      // Normal thunk body generation.<br>
> >      CodeGenFunction(CGM).GenerateThunk(ThunkFn, FnInfo, GD, Thunk);<br>
> > -    CGM.getCXXABI().setThunkLinkage(ThunkFn, ForVTable, GD,<br>
> > -                                    !Thunk.Return.isEmpty());<br>
> >    }<br>
> > +<br>
> > +  CGM.getCXXABI().setThunkLinkage(ThunkFn, ForVTable, GD,<br>
> > +                                  !Thunk.Return.isEmpty());<br>
> > +  if (CGM.supportsCOMDAT() && ThunkFn->isWeakForLinker())<br>
> > +<br>
> > ThunkFn->setComdat(CGM.getModule().getOrInsertComdat(ThunkFn->getName()));<br>
> >  }<br>
> ><br>
> >  void CodeGenVTables::maybeEmitThunkForVTable(GlobalDecl GD,<br>
> ><br>
> > Modified: cfe/trunk/test/CodeGenCXX/microsoft-abi-thunks.cpp<br>
> > URL:<br>
> > <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_test_CodeGenCXX_microsoft-2Dabi-2Dthunks.cpp-3Frev-3D241102-26r1-3D241101-26r2-3D241102-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=BSqEv9KvKMW_Ob8SyngJ70KdZISM_ASROnREeq0cCxk&m=Ap8PTRCUbugTmqBx32Fxl-UyIy_owqBI-xguN98n85c&s=2eBQkLz0nY3jrIvvj-lG1_KkvEmkhM3t38mKIyk9GUo&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/microsoft-abi-thunks.cpp?rev=241102&r1=241101&r2=241102&view=diff</a><br>
> ><br>
> > ==============================================================================<br>
> > --- cfe/trunk/test/CodeGenCXX/microsoft-abi-thunks.cpp (original)<br>
> > +++ cfe/trunk/test/CodeGenCXX/microsoft-abi-thunks.cpp Tue Jun 30 14:07:26<br>
> > 2015<br>
> > @@ -91,7 +91,7 @@ struct E : D {<br>
> ><br>
> >  E::E() {}  // Emits vftable and forces thunk generation.<br>
> ><br>
> > -// CODEGEN-LABEL: define weak_odr x86_thiscallcc %struct.C* @"\01?goo@E<br>
> > @@QAEPAUB@@XZ"<br>
> > +// CODEGEN-LABEL: define weak_odr x86_thiscallcc %struct.C* @"\01?goo@E<br>
> > @@QAEPAUB@@XZ"{{.*}} comdat<br>
> >  // CODEGEN:   call x86_thiscallcc %struct.C* @"\01?goo@E@@UAEPAUC@@XZ"<br>
> >  // CODEGEN:   getelementptr inbounds i8, i8* {{.*}}, i32 4<br>
> >  // CODEGEN: ret<br>
> > @@ -124,7 +124,7 @@ struct I : D {<br>
> ><br>
> >  I::I() {}  // Emits vftable and forces thunk generation.<br>
> ><br>
> > -// CODEGEN-LABEL: define weak_odr x86_thiscallcc %struct.{{[BF]}}*<br>
> > @"\01?goo@I@@QAEPAUB@@XZ"<br>
> > +// CODEGEN-LABEL: define weak_odr x86_thiscallcc %struct.{{[BF]}}*<br>
> > @"\01?goo@I@@QAEPAUB@@XZ"{{.*}} comdat<br>
> >  // CODEGEN: %[[ORIG_RET:.*]] = call x86_thiscallcc %struct.F* @"\01?goo@I<br>
> > @@UAEPAUF@@XZ"<br>
> >  // CODEGEN: %[[ORIG_RET_i8:.*]] = bitcast %struct.F* %[[ORIG_RET]] to i8*<br>
> >  // CODEGEN: %[[VBPTR_i8:.*]] = getelementptr inbounds i8, i8*<br>
> > %[[ORIG_RET_i8]], i32 4<br>
> ><br>
> ><br>
> > _______________________________________________<br>
> > cfe-commits mailing list<br>
> > <a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
> > <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
> ><br>
<br>
</div></div><span class="HOEnZb"><font color="#888888">--<br>
Peter<br>
</font></span><div class="HOEnZb"><div class="h5">_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr">Alexey Samsonov<br><a href="mailto:vonosmas@gmail.com" target="_blank">vonosmas@gmail.com</a></div></div>
</div>