[prev in list] [next in list] [prev in thread] [next in thread]
List: cfe-commits
Subject: Re: r242973 - Downgrade error about adding 'dllimport' to used free function to warning (PR24215)
From: Richard Smith <richard () metafoo ! co ! uk>
Date: 2015-07-27 20:23:47
Message-ID: CAOfiQqkO65fBL=HBQwqGTOaYpaV4ne2UGL+LDJKfsMyDp4P5EA () mail ! gmail ! com
[Download RAW message or body]
[Attachment #2 (multipart/alternative)]
Approved.
On Mon, Jul 27, 2015 at 1:20 PM, Hans Wennborg <hans@chromium.org> wrote:
> Ping?
>
> On Thu, Jul 23, 2015 at 4:45 PM, Hans Wennborg <hans@chromium.org> wrote:
> > This isn't fixing a regression, but would be nice to have in 3.7 I think.
> >
> > Richard, is this OK for merging?
> >
> > On Wed, Jul 22, 2015 at 4:54 PM, Hans Wennborg <hans@hanshq.net> wrote:
> >> Author: hans
> >> Date: Wed Jul 22 18:54:51 2015
> >> New Revision: 242973
> >>
> >> URL: http://llvm.org/viewvc/llvm-project?rev=242973&view=rev
> >> Log:
> >> Downgrade error about adding 'dllimport' to used free function to
> warning (PR24215)
> >>
> >> The code will still work as it can reference the function via its thunk.
> >>
> >> Modified:
> >> cfe/trunk/lib/Sema/SemaDecl.cpp
> >> cfe/trunk/test/Sema/dllimport.c
> >>
> >> Modified: cfe/trunk/lib/Sema/SemaDecl.cpp
> >> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=242973&r1=242972&r2=242973&view=diff
> >>
> ==============================================================================
> >> --- cfe/trunk/lib/Sema/SemaDecl.cpp (original)
> >> +++ cfe/trunk/lib/Sema/SemaDecl.cpp Wed Jul 22 18:54:51 2015
> >> @@ -5368,10 +5368,9 @@ static void checkDLLAttributeRedeclarati
> >> bool AddsAttr = !(OldImportAttr || OldExportAttr) && HasNewAttr;
> >>
> >> if (AddsAttr && !IsSpecialization && !OldDecl->isImplicit()) {
> >> - // If the declaration hasn't been used yet, allow with a warning
> for
> >> - // free functions and global variables.
> >> + // Allow with a warning for free functions and global variables.
> >> bool JustWarn = false;
> >> - if (!OldDecl->isUsed() && !OldDecl->isCXXClassMember()) {
> >> + if (!OldDecl->isCXXClassMember()) {
> >> auto *VD = dyn_cast<VarDecl>(OldDecl);
> >> if (VD && !VD->getDescribedVarTemplate())
> >> JustWarn = true;
> >> @@ -5380,6 +5379,13 @@ static void checkDLLAttributeRedeclarati
> >> JustWarn = true;
> >> }
> >>
> >> + // We cannot change a declaration that's been used because IR has
> already
> >> + // been emitted. Dllimported functions will still work though
> (modulo
> >> + // address equality) as they can use the thunk.
> >> + if (OldDecl->isUsed())
> >> + if (!isa<FunctionDecl>(OldDecl) || !NewImportAttr)
> >> + JustWarn = false;
> >> +
> >> unsigned DiagID = JustWarn ? diag::warn_attribute_dll_redeclaration
> >> : diag::err_attribute_dll_redeclaration;
> >> S.Diag(NewDecl->getLocation(), DiagID)
> >>
> >> Modified: cfe/trunk/test/Sema/dllimport.c
> >> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/dllimport.c?rev=242973&r1=242972&r2=242973&view=diff
> >>
> ==============================================================================
> >> --- cfe/trunk/test/Sema/dllimport.c (original)
> >> +++ cfe/trunk/test/Sema/dllimport.c Wed Jul 22 18:54:51 2015
> >> @@ -143,7 +143,7 @@ __declspec(dllimport) void redecl3(); //
> >>
> >> void redecl4(); // expected-note{{previous
> declaration is here}}
> >> void useRedecl4() { redecl4(); }
> >> -__declspec(dllimport) void redecl4(); // expected-error{{redeclaration
> of 'redecl4' cannot add 'dllimport' attribute}}
> >> +__declspec(dllimport) void redecl4(); //
> expected-warning{{redeclaration of 'redecl4' should not add 'dllimport'
> attribute}}
> >>
> >> // Allow with a warning if the decl hasn't been used yet.
> >> void redecl5(); // expected-note{{previous
> declaration is here}}
> >>
> >>
> >> _______________________________________________
> >> cfe-commits mailing list
> >> cfe-commits@cs.uiuc.edu
> >> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
[Attachment #5 (text/html)]
<div dir="ltr">Approved.</div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jul 27, 2015 \
at 1:20 PM, Hans Wennborg <span dir="ltr"><<a href="mailto:hans@chromium.org" \
target="_blank">hans@chromium.org</a>></span> wrote:<br><blockquote class="gmail_quote" \
style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Ping?<br> <div class="HOEnZb"><div \
class="h5"><br> On Thu, Jul 23, 2015 at 4:45 PM, Hans Wennborg <<a \
href="mailto:hans@chromium.org">hans@chromium.org</a>> wrote:<br> > This isn't fixing a \
regression, but would be nice to have in 3.7 I think.<br> ><br>
> Richard, is this OK for merging?<br>
><br>
> On Wed, Jul 22, 2015 at 4:54 PM, Hans Wennborg <<a \
href="mailto:hans@hanshq.net">hans@hanshq.net</a>> wrote:<br> >> Author: hans<br>
>> Date: Wed Jul 22 18:54:51 2015<br>
>> New Revision: 242973<br>
>><br>
>> URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject- \
3Frev-3D242973-26view-3Drev&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=BSqEv9KvKMW_Ob8SyngJ70KdZISM_ASROnREeq0cCx \
k&m=kQMZtvZnXRRrmXVTHjtGa0i053uCso6JKNjGBZI3k9k&s=z1fEg42O4WxMv-U1EGJBv0JB1L1bLJfGb64T7BPvojw&e=" \
rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=242973&view=rev</a><br> \
>> Log:<br> >> Downgrade error about adding 'dllimport' to used free function to \
warning (PR24215)<br> >><br>
>> The code will still work as it can reference the function via its thunk.<br>
>><br>
>> Modified:<br>
>> cfe/trunk/lib/Sema/SemaDecl.cpp<br>
>> cfe/trunk/test/Sema/dllimport.c<br>
>><br>
>> Modified: cfe/trunk/lib/Sema/SemaDecl.cpp<br>
>> URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_ \
cfe_trunk_lib_Sema_SemaDecl.cpp-3Frev-3D242973-26r1-3D242972-26r2-3D242973-26view-3Ddiff&d=AwMFaQ&c=8hUWFZ \
cy2Z-Za5rBPlktOQ&r=BSqEv9KvKMW_Ob8SyngJ70KdZISM_ASROnREeq0cCxk&m=kQMZtvZnXRRrmXVTHjtGa0i053uCso6JKNjGBZI3k9k&s=9554DGay-mla4cM1QJITLgnI1rUGK9nOQj0epvG-M1o&e=" \
rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=242973&r1=242972&r2=242973&view=diff</a><br>
>> ==============================================================================<br>
>> --- cfe/trunk/lib/Sema/SemaDecl.cpp (original)<br>
>> +++ cfe/trunk/lib/Sema/SemaDecl.cpp Wed Jul 22 18:54:51 2015<br>
>> @@ -5368,10 +5368,9 @@ static void checkDLLAttributeRedeclarati<br>
>> bool AddsAttr = !(OldImportAttr || OldExportAttr) && HasNewAttr;<br>
>><br>
>> if (AddsAttr && !IsSpecialization && !OldDecl->isImplicit()) {<br>
>> - // If the declaration hasn't been used yet, allow with a warning for<br>
>> - // free functions and global variables.<br>
>> + // Allow with a warning for free functions and global variables.<br>
>> bool JustWarn = false;<br>
>> - if (!OldDecl->isUsed() && !OldDecl->isCXXClassMember()) {<br>
>> + if (!OldDecl->isCXXClassMember()) {<br>
>> auto *VD = dyn_cast<VarDecl>(OldDecl);<br>
>> if (VD && !VD->getDescribedVarTemplate())<br>
>> JustWarn = true;<br>
>> @@ -5380,6 +5379,13 @@ static void checkDLLAttributeRedeclarati<br>
>> JustWarn = true;<br>
>> }<br>
>><br>
>> + // We cannot change a declaration that's been used because IR has already<br>
>> + // been emitted. Dllimported functions will still work though (modulo<br>
>> + // address equality) as they can use the thunk.<br>
>> + if (OldDecl->isUsed())<br>
>> + if (!isa<FunctionDecl>(OldDecl) || !NewImportAttr)<br>
>> + JustWarn = false;<br>
>> +<br>
>> unsigned DiagID = JustWarn ? diag::warn_attribute_dll_redeclaration<br>
>> : diag::err_attribute_dll_redeclaration;<br>
>> S.Diag(NewDecl->getLocation(), DiagID)<br>
>><br>
>> Modified: cfe/trunk/test/Sema/dllimport.c<br>
>> URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_ \
cfe_trunk_test_Sema_dllimport.c-3Frev-3D242973-26r1-3D242972-26r2-3D242973-26view-3Ddiff&d=AwMFaQ&c=8hUWFZ \
cy2Z-Za5rBPlktOQ&r=BSqEv9KvKMW_Ob8SyngJ70KdZISM_ASROnREeq0cCxk&m=kQMZtvZnXRRrmXVTHjtGa0i053uCso6JKNjGBZI3k9k&s=S_kJRfnO9XfU9-BqEN5T7GAFhEdddTD2pL6OzWqYsVQ&e=" \
rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/dllimport.c?rev=242973&r1=242972&r2=242973&view=diff</a><br>
>> ==============================================================================<br>
>> --- cfe/trunk/test/Sema/dllimport.c (original)<br>
>> +++ cfe/trunk/test/Sema/dllimport.c Wed Jul 22 18:54:51 2015<br>
>> @@ -143,7 +143,7 @@ __declspec(dllimport) void redecl3(); //<br>
>><br>
>> void redecl4(); // expected-note{{previous declaration is \
here}}<br> >> void useRedecl4() { redecl4(); }<br>
>> -__declspec(dllimport) void redecl4(); // expected-error{{redeclaration of 'redecl4' \
cannot add 'dllimport' attribute}}<br> >> +__declspec(dllimport) void redecl4(); // \
expected-warning{{redeclaration of 'redecl4' should not add 'dllimport' attribute}}<br> \
>><br> >> // Allow with a warning if the decl hasn't been used yet.<br>
>> void redecl5(); // expected-note{{previous declaration is \
here}}<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>
_______________________________________________
cfe-commits mailing list
cfe-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic