<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Fri, May 23, 2014 at 6:37 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"><div class="HOEnZb"><div class="h5">On Fri, May 23, 2014 at 3:06 AM, Nico Rieck <<a href="mailto:nico.rieck@gmail.com">nico.rieck@gmail.com</a>> wrote:<br>

> MSVC allows<br>
><br>
>   template<typename T> void f() {}<br>
>   template<> __declspec(dllimport) void f<int>() {}<br>
><br>
> without f<int> being specified as inline. This only works with dllimport<br>
> and seems to have no effect on linkage without it.<br>
<br>
</div></div>I think the functionality looks good, but I'm worried that this seems<br>
more like a semantic property than an ABI property. I'd like to hear<br>
Reid or Richard's opinion.</blockquote><div><br></div><div>I find it a bit weird that we care in CodeGen whether a dllimport function is marked as 'inline'. I would expect that either Sema should detect the attribute has no effect and discard it, or it should keep it (and in the latter case, CodeGen should respect it and not care whether the function is marked 'inline'). Is there some reason that doesn't work?</div>
<div><br></div><div>Also... what linkage would MSVC give to an explicit specialization of a function template under normal circumstances (no dllimport/dllexport attributes)? Does it treat them as mergeable, like an inline function, or as a strong definition? (Maybe that's what we should base this decision on.)</div>
</div></div></div>