[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