<div dir="ltr"><div>Moving parsing for annot_module_include from ParseTopLevelDecl to ParseExternalDeclaration does not seem right to me -- we only want to allow module imports at the top level. (This patch appears to allow them in namespaces and extern "C" contexts.)</div>
</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, Feb 3, 2014 at 4:51 PM, Douglas Gregor <span dir="ltr"><<a href="mailto:dgregor@apple.com" target="_blank">dgregor@apple.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im"><br>
On Feb 3, 2014, at 2:32 PM, Ben Langmuir <<a href="mailto:blangmuir@apple.com">blangmuir@apple.com</a>> wrote:<br>
<br>
> Based on a suggestion from Jordan I’ve dropped the extra note, which will be on the same location anyway, and added that information into the error diagnostic.  I would have liked to say "treating #include ...” instead of  "treating directive …", but after the preprocessor/lexer this information is lost and I don’t see a nice way to pass it on to the parser.<br>

<br>
</div>There’s an ugly way to pass it on to the parser… you have a couple low bits in the token’s annotation value to record #include vs. #import vs. #include_next.<br>
<br>
+def err_import_in_impl : Error<<br>
+  "%select{|treating directive as a module import; }0module import not allowed "<br>
+  "within @implementation">;<br>
<br>
The diagnostic is pretty wordy when the import comes from a directive. Perhaps this?<br>
<br>
        module import (due to #include) not allowed within @implementation<br>
<br>
        - Doug<br>
<br>
> Ben<br>
><br>
> <import-in-impl.patch><br>
<div class="im">><br>
><br>
> On Feb 3, 2014, at 10:19 AM, Ben Langmuir <<a href="mailto:blangmuir@apple.com">blangmuir@apple.com</a>> wrote:<br>
><br>
>> This patch disallows module import inside @implementaiton, and also moves the parsing for implicit imports (e.g. #import) into the same function as explicit imports (@import).  Previously we silently accepted explicit imports in @implementation, but gave a missing ‘@end’ error on implicit imports.<br>

>><br>
>> Ben<br>
>><br>
</div>>> <import-in-impl.patch>_______________________________________________<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>
><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>
<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><br></div>