[cfe-dev] Issue with checkDLLAttributeRedeclaration in SemaDecl.cpp

Hans Wennborg via cfe-dev cfe-dev at lists.llvm.org
Mon Nov 14 10:39:00 PST 2016


+Denis who wrote r270686

Yes, if you can report this on the Bugzilla that would be better.

If you can provide the preprocessed source and command-line (Clang
should be writing these to files in your temp dir when it crashes), I
can try to reduce it for you.

Thanks,
Hans


On Mon, Nov 14, 2016 at 9:39 AM, Loïc Joly via cfe-dev
<cfe-dev at lists.llvm.org> wrote:
> Hello,
>
> When running Clang 3.9.0 on some Windows code (I've not yet been able to
> reproduce the issue with a small example), we get a crash. I've been able to
> see that the code crashes in checkDLLAttributeRedeclaration, more
> specifically in the following code:
>
>   if (OldImportAttr && !HasNewAttr && !IsInline && !IsStaticDataMember &&
>       !NewDecl->isLocalExternDecl() && !IsQualifiedFriend) {
>     if (IsMicrosoft && IsDefinition) {
>       S.Diag(NewDecl->getLocation(),
>              diag::warn_redeclaration_without_import_attribute)
>           << NewDecl;
>       S.Diag(OldDecl->getLocation(), diag::note_previous_declaration);
>       NewDecl->dropAttr<DLLImportAttr>();
>       NewDecl->addAttr(::new (S.Context) DLLExportAttr(
>           NewImportAttr->getRange(), S.Context,
>           NewImportAttr->getSpellingListIndex()));
>     } else {
>
> We try to read some data from NewImportAttr, but in our case, NewImportAttr
> is null (which is compatible with the !HasNewAttr test). I don't really
> understand the logic of this code, this is why I ask for advice before
> changing anything... Do you think I should open a bug instead of discussing
> on the mailing list?
>
> It appears the code was changed in the following revision:
> Revision: 270686
> Author: dzobnin
> Date: mercredi 25 mai 2016 13:32:42
> Message:
> [ms][dll] #26935 Defining a dllimport function should cause it to be
> exported
>
> If we have some function with dllimport attribute and then we have the
> function
> definition in the same module but without dllimport attribute we should add
> dllexport attribute to this function definition.
> The same should be done for variables.
>
> Example:
> struct __declspec(dllimport) C3 {
>   ~C3();
> };
> C3::~C3() {;} // we should export this definition.
>
> Patch by Andrew V. Tischenko
>
> Differential revision: http://reviews.llvm.org/D18953
>
>
>
> Thank you for any help,
>
>
> ---
> Loïc



More information about the cfe-dev mailing list