r265756 - [modules] Don't write @import in -E output if the current language mode doesn't
Sean Silva via cfe-commits
cfe-commits at lists.llvm.org
Thu Apr 7 17:17:24 PDT 2016
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?
-- 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20160407/ea7d8106/attachment-0001.html>
More information about the cfe-commits
mailing list