<div><div dir="auto">I think that having a flag is fine.  We already have a link time flag for static libc++/libc.  Pulling that into the compile time and adding a flag for the blocks runtime seems reasonable to me.</div><div dir="auto"><br></div><div dir="auto">However, it's for user code that static blocks runtime would be more challenging to support. For the runtime itself, it's actually a matter of ensuring that you have the right DLL storage annotations.</div><div dir="auto"><br></div><div dir="auto">extern __declspec(dllexport) long _NSConcreteStackBlock[];</div><div dir="auto">void f(void) {</div><div dir="auto">  __block int i;</div><div dir="auto">  void (^b)() = ^{ ++i; };</div><div dir="auto">}</div><div dir="auto"><br></div><div dir="auto">That seems to compile properly on trunk and not give you import storage on _NSConcreteStackBlock.</div><br><div class="gmail_quote"><div>On Mon, Jul 3, 2017 at 6:26 AM vit9696 via cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto"><p style="margin:0px;line-height:normal;font-family:'.SF UI Text';color:rgb(69,69,69);min-height:20.3px">Hello,</p><p style="margin:0px;line-height:normal;font-family:'.SF UI Text';color:rgb(69,69,69);min-height:20.3px"><br></p><p style="margin:0px;line-height:normal;font-family:'.SF UI Text';color:rgb(69,69,69);min-height:20.3px">At this moment it is not possible to use blocks when linking to a static Objective-C runtime on Windows due to a patch applied in r271138 (<a href="http://lists.llvm.org/pipermail/cfe-commits/Week-of-Mon-20160523/160244.html" target="_blank">http://lists.llvm.org/pipermail/cfe-commits/Week-of-Mon-20160523/160244.html</a>).</p><p style="margin:0px;line-height:normal;font-family:'.SF UI Text';color:rgb(69,69,69);min-height:20.3px"><br></p><p style="margin:0px;line-height:normal;font-family:'.SF UI Text';color:rgb(69,69,69);min-height:20.3px">The idea of the patch appears to enforce dynamic linking with NSConcreteStackBlock, but this only results in an undefined reference to `__imp__NSConcreteStackBlock' when linking statically (with e.g. objfw).</p><p style="margin:0px;line-height:normal;font-family:'.SF UI Text';color:rgb(69,69,69);min-height:20.3px"><br></p><p style="margin:0px;line-height:normal;font-family:'.SF UI Text';color:rgb(69,69,69);min-height:20.3px">There is a TODO in the added code, however, how can it be called a todo, when the added hack simply breaks block support when linking to static runtimes? It worked just fine before.</p><p style="margin:0px;line-height:normal;font-family:'.SF UI Text';color:rgb(69,69,69);min-height:20.3px"><br></p><p style="margin:0px;line-height:normal;font-family:'.SF UI Text';color:rgb(69,69,69);min-height:20.3px">From what I understand the issue for no static block support is due to detection issues: there seems to be no obvious way to detect the runtime type until the linking step. </p><p style="margin:0px;line-height:normal;font-family:'.SF UI Text';color:rgb(69,69,69);min-height:20.3px"><br></p><p style="margin:0px;line-height:normal;font-family:'.SF UI Text';color:rgb(69,69,69);min-height:20.3px">Will it be ok to add an extra argument (e.g. -fblock-static-runtime) to disable the hacked code? Or could there be any other solution?</p><p style="margin:0px;line-height:normal;font-family:'.SF UI Text';color:rgb(69,69,69);min-height:20.3px"><br></p><p style="margin:0px;line-height:normal;font-family:'.SF UI Text';color:rgb(69,69,69);min-height:20.3px">Vit</p><div></div></div>_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a><br>
</blockquote></div></div><div dir="ltr">-- <br></div><div data-smartmail="gmail_signature">Saleem Abdulrasool<br>compnerd (at) compnerd (dot) org</div>