r244488 - [dllimport] A non-imported class with an imported key can't have a key
Richard Smith via cfe-commits
cfe-commits at lists.llvm.org
Mon Aug 10 17:00:46 PDT 2015
On Mon, Aug 10, 2015 at 12:39 PM, Reid Kleckner via cfe-commits <
cfe-commits at lists.llvm.org> wrote:
> Author: rnk
> Date: Mon Aug 10 14:39:01 2015
> New Revision: 244488
>
> URL: http://llvm.org/viewvc/llvm-project?rev=244488&view=rev
> Log:
> [dllimport] A non-imported class with an imported key can't have a key
>
> Summary:
> The vtable takes its DLL storage class from the class, not the key
> function. When they disagree, the vtable won't be exported by the DLL
> that defines the key function. The easiest way to ensure that importers
> of the class emit their own vtable is to say that the class has no key
> function.
>
> Reviewers: hans, majnemer
>
> Subscribers: cfe-commits
>
> Differential Revision: http://reviews.llvm.org/D11913
>
> Modified:
> cfe/trunk/lib/AST/RecordLayoutBuilder.cpp
> cfe/trunk/test/CodeGenCXX/dllimport-rtti.cpp
>
> Modified: cfe/trunk/lib/AST/RecordLayoutBuilder.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/RecordLayoutBuilder.cpp?rev=244488&r1=244487&r2=244488&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/AST/RecordLayoutBuilder.cpp (original)
> +++ cfe/trunk/lib/AST/RecordLayoutBuilder.cpp Mon Aug 10 14:39:01 2015
> @@ -2008,6 +2008,12 @@ static const CXXMethodDecl *computeKeyFu
> continue;
> }
>
> + // If the key function is dllimport but the class isn't, then the
> class has
> + // no key function. The DLL that exports the key function won't
> export the
> + // vtable in this case.
> + if (MD->hasAttr<DLLImportAttr>() && !RD->hasAttr<DLLImportAttr>())
> + return nullptr;
>
Does the same apply if the key function is DLLExport and the class is not?
(Presumably this would just lead us to export a vtable that we don't need
to, which is presumably harmless?)
> +
> // We found it.
> return MD;
> }
>
> Modified: cfe/trunk/test/CodeGenCXX/dllimport-rtti.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/dllimport-rtti.cpp?rev=244488&r1=244487&r2=244488&view=diff
>
> ==============================================================================
> --- cfe/trunk/test/CodeGenCXX/dllimport-rtti.cpp (original)
> +++ cfe/trunk/test/CodeGenCXX/dllimport-rtti.cpp Mon Aug 10 14:39:01 2015
> @@ -22,3 +22,11 @@ struct __declspec(dllimport) V {
> // GNU-DAG: @_ZTV1V = available_externally dllimport
> // GNU-DAG: @_ZTS1V = linkonce_odr
> // GNU-DAG: @_ZTI1V = linkonce_odr
> +
> +struct W {
> + __declspec(dllimport) virtual void f();
> + virtual void g();
> +} w;
> +// GNU-DAG: @_ZTV1W = linkonce_odr
> +// GNU-DAG: @_ZTS1W = linkonce_odr
> +// GNU-DAG: @_ZTI1W = linkonce_odr
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150810/65591e16/attachment-0001.html>
More information about the cfe-commits
mailing list