<p dir="ltr">Approved for branch.</p>
<div class="gmail_quote">On 29 Oct 2014 16:32, "Hans Wennborg" <<a href="mailto:hans@chromium.org">hans@chromium.org</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Tom, I'd like to merge this to the 3.5 branch.<br>
Richard, I guess you're the code owner.<br>
<br>
On Wed, Oct 29, 2014 at 2:20 PM, Hans Wennborg <<a href="mailto:hans@hanshq.net">hans@hanshq.net</a>> wrote:<br>
> Author: hans<br>
> Date: Wed Oct 29 16:20:57 2014<br>
> New Revision: 220874<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=220874&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=220874&view=rev</a><br>
> Log:<br>
> Follow-up to r216619: use isCXXCLassMember() instead of trying to<br>
> check the context ourselves when selectively allowing late-added<br>
> dll attributes on unused free functions and variables (PR20746)<br>
><br>
> Modified:<br>
>     cfe/trunk/lib/Sema/SemaDecl.cpp<br>
>     cfe/trunk/test/SemaCXX/dllexport.cpp<br>
>     cfe/trunk/test/SemaCXX/dllimport.cpp<br>
><br>
> Modified: cfe/trunk/lib/Sema/SemaDecl.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=220874&r1=220873&r2=220874&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=220874&r1=220873&r2=220874&view=diff</a><br>
> ==============================================================================<br>
> --- cfe/trunk/lib/Sema/SemaDecl.cpp (original)<br>
> +++ cfe/trunk/lib/Sema/SemaDecl.cpp Wed Oct 29 16:20:57 2014<br>
> @@ -5140,7 +5140,7 @@ static void checkDLLAttributeRedeclarati<br>
>      // If the declaration hasn't been used yet, allow with a warning for<br>
>      // free functions and global variables.<br>
>      bool JustWarn = false;<br>
> -    if (!OldDecl->isUsed() && OldDecl->getDeclContext()->isFileContext()) {<br>
> +    if (!OldDecl->isUsed() && !OldDecl->isCXXClassMember()) {<br>
>        auto *VD = dyn_cast<VarDecl>(OldDecl);<br>
>        if (VD && !VD->getDescribedVarTemplate())<br>
>          JustWarn = true;<br>
><br>
> Modified: cfe/trunk/test/SemaCXX/dllexport.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/dllexport.cpp?rev=220874&r1=220873&r2=220874&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/dllexport.cpp?rev=220874&r1=220873&r2=220874&view=diff</a><br>
> ==============================================================================<br>
> --- cfe/trunk/test/SemaCXX/dllexport.cpp (original)<br>
> +++ cfe/trunk/test/SemaCXX/dllexport.cpp Wed Oct 29 16:20:57 2014<br>
> @@ -55,6 +55,11 @@ __declspec(dllexport) extern int GlobalR<br>
>                        extern int GlobalRedecl3; // expected-note{{previous declaration is here}}<br>
>  __declspec(dllexport) extern int GlobalRedecl3; // expected-warning{{redeclaration of 'GlobalRedecl3' should not add 'dllexport' attribute}}<br>
><br>
> +extern "C" {<br>
> +                      extern int GlobalRedecl4; // expected-note{{previous declaration is here}}<br>
> +__declspec(dllexport) extern int GlobalRedecl4; // expected-warning{{redeclaration of 'GlobalRedecl4' should not add 'dllexport' attribute}}<br>
> +}<br>
> +<br>
>  // External linkage is required.<br>
>  __declspec(dllexport) static int StaticGlobal; // expected-error{{'StaticGlobal' must have external linkage when declared 'dllexport'}}<br>
>  __declspec(dllexport) Internal InternalTypeGlobal; // expected-error{{'InternalTypeGlobal' must have external linkage when declared 'dllexport'}}<br>
> @@ -191,8 +196,13 @@ __declspec(dllexport) void redecl2();<br>
>                        void redecl3(); // expected-note{{previous declaration is here}}<br>
>  __declspec(dllexport) void redecl3(); // expected-warning{{redeclaration of 'redecl3' should not add 'dllexport' attribute}}<br>
><br>
> +extern "C" {<br>
>                        void redecl4(); // expected-note{{previous declaration is here}}<br>
> -__declspec(dllexport) inline void redecl4() {} // expected-warning{{redeclaration of 'redecl4' should not add 'dllexport' attribute}}<br>
> +__declspec(dllexport) void redecl4(); // expected-warning{{redeclaration of 'redecl4' should not add 'dllexport' attribute}}<br>
> +}<br>
> +<br>
> +                      void redecl5(); // expected-note{{previous declaration is here}}<br>
> +__declspec(dllexport) inline void redecl5() {} // expected-warning{{redeclaration of 'redecl5' should not add 'dllexport' attribute}}<br>
><br>
>  // Friend functions<br>
>  struct FuncFriend {<br>
><br>
> Modified: cfe/trunk/test/SemaCXX/dllimport.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/dllimport.cpp?rev=220874&r1=220873&r2=220874&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/dllimport.cpp?rev=220874&r1=220873&r2=220874&view=diff</a><br>
> ==============================================================================<br>
> --- cfe/trunk/test/SemaCXX/dllimport.cpp (original)<br>
> +++ cfe/trunk/test/SemaCXX/dllimport.cpp Wed Oct 29 16:20:57 2014<br>
> @@ -77,6 +77,11 @@ __declspec(dllimport) extern int GlobalR<br>
>                        extern int GlobalRedecl4; // expected-note{{previous declaration is here}}<br>
>  __declspec(dllimport) extern int GlobalRedecl4; // expected-warning{{redeclaration of 'GlobalRedecl4' should not add 'dllimport' attribute}}<br>
><br>
> +extern "C" {<br>
> +                      extern int GlobalRedecl5; // expected-note{{previous declaration is here}}<br>
> +__declspec(dllimport) extern int GlobalRedecl5; // expected-warning{{redeclaration of 'GlobalRedecl5' should not add 'dllimport' attribute}}<br>
> +}<br>
> +<br>
>  // External linkage is required.<br>
>  __declspec(dllimport) static int StaticGlobal; // expected-error{{'StaticGlobal' must have external linkage when declared 'dllimport'}}<br>
>  __declspec(dllimport) Internal InternalTypeGlobal; // expected-error{{'InternalTypeGlobal' must have external linkage when declared 'dllimport'}}<br>
> @@ -229,8 +234,13 @@ __declspec(dllimport) void redecl3(); //<br>
>                        void redecl4(); // expected-note{{previous declaration is here}}<br>
>  __declspec(dllimport) void redecl4(); // expected-warning{{redeclaration of 'redecl4' should not add 'dllimport' attribute}}<br>
><br>
> +extern "C" {<br>
>                        void redecl5(); // expected-note{{previous declaration is here}}<br>
> -__declspec(dllimport) inline void redecl5() {} // expected-warning{{redeclaration of 'redecl5' should not add 'dllimport' attribute}}<br>
> +__declspec(dllimport) void redecl5(); // expected-warning{{redeclaration of 'redecl5' should not add 'dllimport' attribute}}<br>
> +}<br>
> +<br>
> +                      void redecl6(); // expected-note{{previous declaration is here}}<br>
> +__declspec(dllimport) inline void redecl6() {} // expected-warning{{redeclaration of 'redecl6' should not add 'dllimport' attribute}}<br>
><br>
>  // Friend functions<br>
>  struct FuncFriend {<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" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</blockquote></div>