r265756 - [modules] Don't write @import in -E output if the current language mode doesn't
Richard Smith via cfe-commits
cfe-commits at lists.llvm.org
Thu Apr 7 17:18:52 PDT 2016
On Thu, Apr 7, 2016 at 5:17 PM, Sean Silva via cfe-commits <
cfe-commits at lists.llvm.org> wrote:
> On Thu, Apr 7, 2016 at 5:09 PM, Richard Smith via cfe-commits <
> cfe-commits at lists.llvm.org> wrote:
>
>> Author: rsmith
>> Date: Thu Apr 7 19:09:53 2016
>> New Revision: 265756
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=265756&view=rev
>> Log:
>> [modules] Don't write @import in -E output if the current language mode
>> doesn't
>> support @import; use the form as written instead.
>>
>> Added:
>> cfe/trunk/test/Modules/preprocess.cpp
>> Modified:
>> cfe/trunk/lib/Frontend/PrintPreprocessedOutput.cpp
>> cfe/trunk/lib/Frontend/Rewrite/InclusionRewriter.cpp
>>
>> Modified: cfe/trunk/lib/Frontend/PrintPreprocessedOutput.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/PrintPreprocessedOutput.cpp?rev=265756&r1=265755&r2=265756&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/lib/Frontend/PrintPreprocessedOutput.cpp (original)
>> +++ cfe/trunk/lib/Frontend/PrintPreprocessedOutput.cpp Thu Apr 7
>> 19:09:53 2016
>> @@ -326,8 +326,18 @@ void PrintPPOutputPPCallbacks::Inclusion
>> if (Imported) {
>> startNewLineIfNeeded();
>> MoveToLine(HashLoc);
>> - OS << "@import " << Imported->getFullModuleName() << ";"
>> - << " /* clang -E: implicit import for \"" << File->getName() <<
>> "\" */";
>> + if (PP.getLangOpts().ObjC2) {
>> + OS << "@import " << Imported->getFullModuleName() << ";"
>> + << " /* clang -E: implicit import for \"" << File->getName()
>> + << "\" */";
>> + } else {
>> + // FIXME: Preseve whether this was a
>> + // #include/#include_next/#include_macros/#import.
>>
>
> Should we add a comment with a disclaimer in the user-visible output, to
> prevent confusion?
>
Not a bad idea. Might also be a good place to explain why there's a
#include in the -E output in the first place...
> -- Sean Silva
>
>
>> + OS << "#include "
>> + << (IsAngled ? '<' : '"')
>> + << FileName
>> + << (IsAngled ? '>' : '"');
>> + }
>> // Since we want a newline after the @import, but not a #<line>,
>> start a new
>> // line immediately.
>> EmittedTokensOnThisLine = true;
>>
>> Modified: cfe/trunk/lib/Frontend/Rewrite/InclusionRewriter.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/Rewrite/InclusionRewriter.cpp?rev=265756&r1=265755&r2=265756&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/lib/Frontend/Rewrite/InclusionRewriter.cpp (original)
>> +++ cfe/trunk/lib/Frontend/Rewrite/InclusionRewriter.cpp Thu Apr 7
>> 19:09:53 2016
>> @@ -450,7 +450,9 @@ bool InclusionRewriter::Process(FileID F
>> WriteLineInfo(FileName, Line - 1, FileType, "");
>> StringRef LineInfoExtra;
>> SourceLocation Loc = HashToken.getLocation();
>> - if (const Module *Mod = FindModuleAtLocation(Loc))
>> + if (const Module *Mod = PP.getLangOpts().ObjC2
>> + ? FindModuleAtLocation(Loc)
>> + : nullptr)
>> WriteImplicitModuleImport(Mod);
>> else if (const IncludedFile *Inc =
>> FindIncludeAtLocation(Loc)) {
>> // include and recursively process the file
>>
>> Added: cfe/trunk/test/Modules/preprocess.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/preprocess.cpp?rev=265756&view=auto
>>
>> ==============================================================================
>> --- cfe/trunk/test/Modules/preprocess.cpp (added)
>> +++ cfe/trunk/test/Modules/preprocess.cpp Thu Apr 7 19:09:53 2016
>> @@ -0,0 +1,22 @@
>> +// RUN: rm -rf %t
>> +// RUN: %clang_cc1 -fmodules -fimplicit-module-maps
>> -fmodules-cache-path=%t -I %S/Inputs -x c++ -E %s | \
>> +// RUN: FileCheck -strict-whitespace %s --check-prefix=CHECK
>> --check-prefix=CXX
>> +// RUN: %clang_cc1 -fmodules -fimplicit-module-maps
>> -fmodules-cache-path=%t -I %S/Inputs -x objective-c -E %s | \
>> +// RUN: FileCheck -strict-whitespace %s --check-prefix=CHECK
>> --check-prefix=OBJC
>> +// RUN: %clang_cc1 -fmodules -fimplicit-module-maps
>> -fmodules-cache-path=%t -I %S/Inputs -x c++ -E -frewrite-includes %s | \
>> +// RUN: FileCheck -strict-whitespace %s --check-prefix=CHECK
>> --check-prefix=CXX
>> +// RUN: %clang_cc1 -fmodules -fimplicit-module-maps
>> -fmodules-cache-path=%t -I %S/Inputs -x objective-c -E -frewrite-includes
>> %s | \
>> +// RUN: FileCheck -strict-whitespace %s --check-prefix=CHECK
>> --check-prefix=OBJC
>> +#include "dummy.h"
>> +#include "dummy.h"
>> +foo bar baz
>> +
>> +// The weird {{ }} here is to prevent the -frewrite-includes test from
>> matching its own CHECK lines.
>> +
>> +// CXX: #include{{ }}"dummy.h"
>> +// CXX: #include{{ }}"dummy.h"
>> +// CXX: foo bar baz
>> +
>> +// OBJC: @import{{ }}dummy; /* clang
>> +// OBJC: @import{{ }}dummy; /* clang
>> +// OBJC: foo bar baz
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>>
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20160407/766ce4da/attachment.html>
More information about the cfe-commits
mailing list