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