<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Title" content="">
<meta name="Keywords" content="">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.msoIns
        {mso-style-type:export-only;
        mso-style-name:"";
        text-decoration:underline;
        color:teal;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style>
</head>
<body bgcolor="white" lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal">See Petr's follow-up. It doesn't look like this was the responsible change.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:12.0pt;color:black">From: </span></b><span style="font-size:12.0pt;color:black">Eric Fiselier <eric@efcs.ca><br>
<b>Date: </b>Thursday, August 17, 2017 at 4:02 PM<br>
<b>To: </b>Petr Hosek <phosek@chromium.org><br>
<b>Cc: </b>cfe-commits <cfe-commits@lists.llvm.org>, Marshall Clow <mclow.lists@gmail.com>, Hans Wennborg <hans@chromium.org>, Shoaib Meenai <smeenai@fb.com><br>
<b>Subject: </b>Re: [libcxx] r309474 - [libc++] Hoist extern template above first use<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">probably shouldn't merge this then.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal">On Aug 17, 2017 4:54 PM, "Petr Hosek via cfe-commits" <<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a>> wrote:<o:p></o:p></p>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<div>
<p class="MsoNormal">This broke our build of WebKit with the following build failure:
<o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<div>
<p class="MsoNormal">../../buildtools/linux-x64/clang/bin/clang++ -MD -MF obj/apps/web_view/web_view_test.test_webview.o.d -DTOOLCHAIN_VERSION=4e89c701396412a50a901115ab4a2a09145f3777 -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS -DCAIRO_HAS_FC_FONT=0 -DU_USING_ICU_NAMESPACE=0
 -DU_ENABLE_DYLOAD=0 -DU_STATIC_IMPLEMENTATION -DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_FILE -I../.. -Igen -I../../third_party/webkit/Source/WebKit/fuchsia -I../../third_party/boringssl/include -Igen/third_party/cairo -I../../third_party/curl/include -Iobj/third_party/curl
 -Iobj/third_party/curl/curl -I../../third_party/freetype2/include -I../../third_party/harfbuzz/src -I../../third_party/icu/source/common -I../../third_party/icu/source/i18n -I../../third_party/libjpeg-turbo -I../../third_party/libpng -I../../third_party/zlib
 -I../../third_party/libxml2/include -I../../third_party/sqlite -g --sysroot=/usr/local/google/home/phosek/fuchsia/out/build-magenta/build-magenta-pc-x86-64/sysroot --target=x86_64-fuchsia -no-canonical-prefixes -fdebug-prefix-map=/usr/local/google/home/phosek/fuchsia=.
 -Wall -Wextra -Wno-unused-parameter -Wno-enum-compare-switch -Wno-unused-lambda-capture -Wno-user-defined-warnings -fvisibility=hidden -g -Og -fsanitize=safe-stack -fstack-protector-strong -Werror -Wno-error=deprecated-declarations -fvisibility-inlines-hidden
 -std=c++14 -fno-exceptions -fno-rtti -Wthread-safety -c ../../apps/web_view/test_webview.cpp -o obj/apps/web_view/web_view_test.test_webview.o<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">In file included from ../../apps/web_view/test_webview.cpp:1:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">In file included from ../../third_party/webkit/Source/WebKit/fuchsia/WebView.h:28:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">In file included from ../../buildtools/linux-x64/clang/lib/x86_64-fuchsia/include/c++/v1/functional:484:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">../../buildtools/linux-x64/clang/lib/x86_64-fuchsia/include/c++/v1/type_traits:4323:23: error: implicit instantiation of undefined template 'std::__2::basic_string<char, std::__2::char_traits<char>, std::__2::allocator<char> >'<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">_LIBCPP_INVOKE_RETURN(_VSTD::forward<_Fp>(__f)(_VSTD::forward<_Args>(__args)...))<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                      ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">../../buildtools/linux-x64/clang/lib/x86_64-fuchsia/include/c++/v1/__config:468:15: note: expanded from macro '_VSTD'<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">#define _VSTD std::_LIBCPP_NAMESPACE<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">              ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">../../buildtools/linux-x64/clang/lib/x86_64-fuchsia/include/c++/v1/type_traits:4340:9: note: in instantiation of exception specification for '__invoke<std::__2::function<std::__2::basic_string<char, std::__2::char_traits<char>, std::__2::allocator<char>
 > (const std::__2::basic_string<char, std::__2::char_traits<char>, std::__2::allocator<char> > &)> &, const std::__2::basic_string<char, std::__2::char_traits<char>, std::__2::allocator<char> > &>' requested here<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">        _VSTD::__invoke(_VSTD::declval<_Fp>(), _VSTD::declval<_Args>()...));<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">        ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">../../buildtools/linux-x64/clang/lib/x86_64-fuchsia/include/c++/v1/__config:468:15: note: expanded from macro '_VSTD'<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">#define _VSTD std::_LIBCPP_NAMESPACE<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">              ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">../../buildtools/linux-x64/clang/lib/x86_64-fuchsia/include/c++/v1/functional:1601:33: note: in instantiation of template class 'std::__2::__invokable_r<void, std::__2::function<std::__2::basic_string<char, std::__2::char_traits<char>,
 std::__2::allocator<char> > (const std::__2::basic_string<char, std::__2::char_traits<char>, std::__2::allocator<char> > &)> &, const std::__2::basic_string<char, std::__2::char_traits<char>, std::__2::allocator<char> > &>' requested here<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                                __invokable<_Fp&, _ArgTypes...>::value><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                                ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">../../buildtools/linux-x64/clang/lib/x86_64-fuchsia/include/c++/v1/functional:1626:9: note: in instantiation of default argument for '__callable<std::__2::function<std::__2::basic_string<char, std::__2::char_traits<char>, std::__2::allocator<char>
 > (const std::__2::basic_string<char, std::__2::char_traits<char>, std::__2::allocator<char> > &)> >' required here<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">        __callable<_Fp>::value && !is_same<_Fp, function>::value<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">        ^~~~~~~~~~~~~~~<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">../../buildtools/linux-x64/clang/lib/x86_64-fuchsia/include/c++/v1/functional:1628:5: note: in instantiation of default argument for 'function<std::__2::function<std::__2::basic_string<char, std::__2::char_traits<char>, std::__2::allocator<char>
 > (const std::__2::basic_string<char, std::__2::char_traits<char>, std::__2::allocator<char> > &)> >' required here<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    function(_Fp);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    ^~~~~~~~~~~~~<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">../../buildtools/linux-x64/clang/lib/x86_64-fuchsia/include/c++/v1/functional:1588:28: note: while substituting deduced template arguments into function template 'function' [with _Fp = std::__2::function<std::__2::basic_string<char, std::__2::char_traits<char>,
 std::__2::allocator<char> > (const std::__2::basic_string<char, std::__2::char_traits<char>, std::__2::allocator<char> > &)>, $1 = (no value)]<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">class _LIBCPP_TEMPLATE_VIS function<_Rp(_ArgTypes...)><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                           ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">../../third_party/webkit/Source/WebKit/fuchsia/WebView.h:48:7: note: while declaring the implicit copy constructor for 'WebView'<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">class WebView {<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">      ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">../../buildtools/linux-x64/clang/lib/x86_64-fuchsia/include/c++/v1/iosfwd:193:32: note: template is declared here<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    class _LIBCPP_TEMPLATE_VIS basic_string;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                               ^<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">1 error generated.<o:p></o:p></p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal">On Wed, Aug 9, 2017 at 4:50 PM Hans Wennborg via cfe-commits <<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a>> wrote:<o:p></o:p></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<p class="MsoNormal">Marshall: ping?<br>
<br>
On Thu, Aug 3, 2017 at 10:20 AM, Hans Wennborg <<a href="mailto:hans@chromium.org" target="_blank">hans@chromium.org</a>> wrote:<br>
> Sounds good to me, but Eric or Marshall need to sign off.<br>
><br>
> On Thu, Aug 3, 2017 at 10:15 AM, Shoaib Meenai <<a href="mailto:smeenai@fb.com" target="_blank">smeenai@fb.com</a>> wrote:<br>
>> Ping.<br>
>><br>
>> On 7/28/17, 7:57 PM, "Shoaib Meenai" <<a href="mailto:smeenai@fb.com" target="_blank">smeenai@fb.com</a>> wrote:<br>
>><br>
>>     Marshall, Eric, Hans,<br>
>><br>
>>     Any objections to backporting this to 5.0? It fixes a potential visibility<br>
>>     issue for clients of the header.<br>
>><br>
>>     On 7/28/17, 7:54 PM, "cfe-commits on behalf of Shoaib Meenai via cfe-commits" <<a href="mailto:cfe-commits-bounces@lists.llvm.org" target="_blank">cfe-commits-bounces@lists.llvm.org</a> on behalf of
<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a>> wrote:<br>
>><br>
>>         Author: smeenai<br>
>>         Date: Fri Jul 28 19:54:41 2017<br>
>>         New Revision: 309474<br>
>><br>
>>         URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject-3Frev-3D309474-26view-3Drev&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=EcGbIxegCOTbSLMJelp_vOaeGiS_iQ1eciM_oeX41-E&s=5q7TS5mhaUsf-1jQBqX62RvjcqAiy2whh8RO7yFhPyA&e=" target="_blank">
https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject-3Frev-3D309474-26view-3Drev&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=EcGbIxegCOTbSLMJelp_vOaeGiS_iQ1eciM_oeX41-E&s=5q7TS5mhaUsf-1jQBqX62RvjcqAiy2whh8RO7yFhPyA&e=</a><br>
>>         Log:<br>
>>         [libc++] Hoist extern template above first use<br>
>><br>
>>         This function template is referenced inside class basic_string as a<br>
>>         friend function. The extern template declaration needs to be above that<br>
>>         friend declaration to actually take effect.<br>
>><br>
>>         This is important because this function was marked as exported in<br>
>>         r307966, so without the extern template taking effect, it can leak into<br>
>>         other DSOs as a visible symbol.<br>
>><br>
>>         Modified:<br>
>>             libcxx/trunk/include/string<br>
>><br>
>>         Modified: libcxx/trunk/include/string<br>
>>         URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_libcxx_trunk_include_string-3Frev-3D309474-26r1-3D309473-26r2-3D309474-26view-3Ddiff&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=EcGbIxegCOTbSLMJelp_vOaeGiS_iQ1eciM_oeX41-E&s=zFJXc9CA6Sgyh25kGeAh4Qo36gpNQX_zo2qRlRFJoL8&e=" target="_blank">
https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_libcxx_trunk_include_string-3Frev-3D309474-26r1-3D309473-26r2-3D309474-26view-3Ddiff&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=EcGbIxegCOTbSLMJelp_vOaeGiS_iQ1eciM_oeX41-E&s=zFJXc9CA6Sgyh25kGeAh4Qo36gpNQX_zo2qRlRFJoL8&e=</a><br>
>>         ==============================================================================<br>
>>         --- libcxx/trunk/include/string (original)<br>
>>         +++ libcxx/trunk/include/string Fri Jul 28 19:54:41 2017<br>
>>         @@ -556,6 +556,8 @@ template<class _CharT, class _Traits, cl<br>
>>          basic_string<_CharT, _Traits, _Allocator><br>
>>          operator+(const basic_string<_CharT, _Traits, _Allocator>& __x, _CharT __y);<br>
>><br>
>>         +_LIBCPP_EXTERN_TEMPLATE(_LIBCPP_FUNC_VIS string operator+<char, char_traits<char>, allocator<char> >(char const*, string const&))<br>
>>         +<br>
>>          template <bool><br>
>>          class _LIBCPP_TEMPLATE_VIS __basic_string_common<br>
>>          {<br>
>>         @@ -3999,7 +4001,6 @@ basic_string<_CharT, _Traits, _Allocator<br>
>><br>
>>          _LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS basic_string<char>)<br>
>>          _LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS basic_string<wchar_t>)<br>
>>         -_LIBCPP_EXTERN_TEMPLATE(_LIBCPP_FUNC_VIS string operator+<char, char_traits<char>, allocator<char> >(char const*, string const&))<br>
>><br>
>>          #if _LIBCPP_STD_VER > 11<br>
>>          // Literal suffixes for basic_string [basic.string.literals]<br>
>><br>
>><br>
>>         _______________________________________________<br>
>>         cfe-commits mailing list<br>
>>         <a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a><br>
>>         <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__lists.llvm.org_cgi-2Dbin_mailman_listinfo_cfe-2Dcommits&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=EcGbIxegCOTbSLMJelp_vOaeGiS_iQ1eciM_oeX41-E&s=95GYNfQT_kBVjYvYRYnF3mje6PEyF4EDl4MCBQKCu88&e=" target="_blank">https://urldefense.proofpoint.com/v2/url?u=http-3A__lists.llvm.org_cgi-2Dbin_mailman_listinfo_cfe-2Dcommits&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=EcGbIxegCOTbSLMJelp_vOaeGiS_iQ1eciM_oeX41-E&s=95GYNfQT_kBVjYvYRYnF3mje6PEyF4EDl4MCBQKCu88&e=</a><br>
>><br>
>><br>
>><br>
>><br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a><br>
<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__lists.llvm.org_cgi-2Dbin_mailman_listinfo_cfe-2Dcommits&d=DwMFaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=R8SHX_YlSY4U7zmB4h5gQuWQpibuszvycUCHsYjXGC8&s=8IKFSIPqi0P433Yd0yIAnrYivPntOldn15teS328Cd8&e=" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><o:p></o:p></p>
</blockquote>
</div>
</div>
</div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a><br>
<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__lists.llvm.org_cgi-2Dbin_mailman_listinfo_cfe-2Dcommits&d=DwMFaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=R8SHX_YlSY4U7zmB4h5gQuWQpibuszvycUCHsYjXGC8&s=8IKFSIPqi0P433Yd0yIAnrYivPntOldn15teS328Cd8&e=" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><o:p></o:p></p>
</blockquote>
</div>
</div>
</div>
</body>
</html>