<div dir="ltr">Looks good to me, but John's the code owner for IR generation so I'd like his signoff.<br><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jul 15, 2015 at 7:58 AM, Rafael Espíndola <span dir="ltr"><<a href="mailto:rafael.espindola@gmail.com" target="_blank">rafael.espindola@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I would like to port this to 3.7.<br>
<div class="HOEnZb"><div class="h5"><br>
On 15 July 2015 at 07:48, Rafael Espindola <<a href="mailto:rafael.espindola@gmail.com">rafael.espindola@gmail.com</a>> wrote:<br>
> Author: rafael<br>
> Date: Wed Jul 15 09:48:06 2015<br>
> New Revision: 242293<br>
><br>
> URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject-3Frev-3D242293-26view-3Drev&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=BSqEv9KvKMW_Ob8SyngJ70KdZISM_ASROnREeq0cCxk&m=6woib-jqvBpk7D6o7WRsB7eeg8JN2LL_gdlI0gTH26Y&s=DrA6sPQXmqyrFHAcqzaRA2Cq2J0vRczefOApSLnVrtY&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=242293&view=rev</a><br>
> Log:<br>
> Set comdat when an available_externally thunk is converted to linkonce_odr.<br>
><br>
> Fixes pr24130.<br>
><br>
> Modified:<br>
>     cfe/trunk/lib/CodeGen/CGVTables.cpp<br>
>     cfe/trunk/test/CodeGenCXX/thunks.cpp<br>
><br>
> Modified: cfe/trunk/lib/CodeGen/CGVTables.cpp<br>
> URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_lib_CodeGen_CGVTables.cpp-3Frev-3D242293-26r1-3D242292-26r2-3D242293-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=BSqEv9KvKMW_Ob8SyngJ70KdZISM_ASROnREeq0cCxk&m=6woib-jqvBpk7D6o7WRsB7eeg8JN2LL_gdlI0gTH26Y&s=F08AnT5_pkRDtXFWGdHAcite9GLafFv2w1UXQAk9piw&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGVTables.cpp?rev=242293&r1=242292&r2=242293&view=diff</a><br>
> ==============================================================================<br>
> --- cfe/trunk/lib/CodeGen/CGVTables.cpp (original)<br>
> +++ cfe/trunk/lib/CodeGen/CGVTables.cpp Wed Jul 15 09:48:06 2015<br>
> @@ -56,6 +56,21 @@ static void setThunkVisibility(CodeGenMo<br>
>    CGM.setGlobalVisibility(Fn, MD);<br>
>  }<br>
><br>
> +static void setThunkProperties(CodeGenModule &CGM, const ThunkInfo &Thunk,<br>
> +                               llvm::Function *ThunkFn, bool ForVTable,<br>
> +                               GlobalDecl GD) {<br>
> +  CGM.setFunctionLinkage(GD, ThunkFn);<br>
> +  CGM.getCXXABI().setThunkLinkage(ThunkFn, ForVTable, GD,<br>
> +                                  !Thunk.Return.isEmpty());<br>
> +<br>
> +  // Set the right visibility.<br>
> +  const CXXMethodDecl *MD = cast<CXXMethodDecl>(GD.getDecl());<br>
> +  setThunkVisibility(CGM, MD, Thunk, ThunkFn);<br>
> +<br>
> +  if (CGM.supportsCOMDAT() && ThunkFn->isWeakForLinker())<br>
> +    ThunkFn->setComdat(CGM.getModule().getOrInsertComdat(ThunkFn->getName()));<br>
> +}<br>
> +<br>
>  #ifndef NDEBUG<br>
>  static bool similar(const ABIArgInfo &infoL, CanQualType typeL,<br>
>                      const ABIArgInfo &infoR, CanQualType typeR) {<br>
> @@ -429,8 +444,7 @@ void CodeGenVTables::emitThunk(GlobalDec<br>
>        return;<br>
>      }<br>
><br>
> -    // Change the linkage.<br>
> -    CGM.setFunctionLinkage(GD, ThunkFn);<br>
> +    setThunkProperties(CGM, Thunk, ThunkFn, ForVTable, GD);<br>
>      return;<br>
>    }<br>
><br>
> @@ -451,16 +465,7 @@ void CodeGenVTables::emitThunk(GlobalDec<br>
>      CodeGenFunction(CGM).generateThunk(ThunkFn, FnInfo, GD, Thunk);<br>
>    }<br>
><br>
> -  CGM.setFunctionLinkage(GD, ThunkFn);<br>
> -  CGM.getCXXABI().setThunkLinkage(ThunkFn, ForVTable, GD,<br>
> -                                  !Thunk.Return.isEmpty());<br>
> -<br>
> -  // Set the right visibility.<br>
> -  const CXXMethodDecl *MD = cast<CXXMethodDecl>(GD.getDecl());<br>
> -  setThunkVisibility(CGM, MD, Thunk, ThunkFn);<br>
> -<br>
> -  if (CGM.supportsCOMDAT() && ThunkFn->isWeakForLinker())<br>
> -    ThunkFn->setComdat(CGM.getModule().getOrInsertComdat(ThunkFn->getName()));<br>
> +  setThunkProperties(CGM, Thunk, ThunkFn, ForVTable, GD);<br>
>  }<br>
><br>
>  void CodeGenVTables::maybeEmitThunkForVTable(GlobalDecl GD,<br>
><br>
> Modified: cfe/trunk/test/CodeGenCXX/thunks.cpp<br>
> URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_test_CodeGenCXX_thunks.cpp-3Frev-3D242293-26r1-3D242292-26r2-3D242293-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=BSqEv9KvKMW_Ob8SyngJ70KdZISM_ASROnREeq0cCxk&m=6woib-jqvBpk7D6o7WRsB7eeg8JN2LL_gdlI0gTH26Y&s=sDF_8bnNwMr6h2puSkE3BLS4HHCtusbaPLJa9JMMnUE&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/thunks.cpp?rev=242293&r1=242292&r2=242293&view=diff</a><br>
> ==============================================================================<br>
> --- cfe/trunk/test/CodeGenCXX/thunks.cpp (original)<br>
> +++ cfe/trunk/test/CodeGenCXX/thunks.cpp Wed Jul 15 09:48:06 2015<br>
> @@ -361,6 +361,23 @@ namespace Test15 {<br>
>    // CHECK: declare void @_ZThn8_N6Test151C1fEiz<br>
>  }<br>
><br>
> +namespace Test16 {<br>
> +struct A {<br>
> +  virtual ~A();<br>
> +};<br>
> +struct B {<br>
> +  virtual void foo();<br>
> +};<br>
> +struct C : public A, public B {<br>
> +  void foo() {}<br>
> +};<br>
> +struct D : public C {<br>
> +  ~D();<br>
> +};<br>
> +D::~D() {}<br>
> +// CHECK: define linkonce_odr void @_ZThn8_N6Test161C3fooEv({{.*}}) {{.*}} comdat<br>
> +}<br>
> +<br>
>  /**** The following has to go at the end of the file ****/<br>
><br>
>  // This is from Test5:<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>
</div></div></blockquote></div><br></div></div>