r187207 - [frontend] '-frewrite-includes' should not ignore headers included from command-line.

Sebastian Pop spop at codeaurora.org
Mon Jul 29 13:38:26 PDT 2013


On Fri, Jul 26, 2013 at 10:32 AM, Argyrios Kyrtzidis <akyrtzi at gmail.com> wrote:
> Author: akirtzidis
> Date: Fri Jul 26 10:32:04 2013
> New Revision: 187207
>
> URL: http://llvm.org/viewvc/llvm-project?rev=187207&view=rev
> Log:
> [frontend] '-frewrite-includes' should not ignore headers included from command-line.
>
> rdar://14556182
>
> Added:
>     cfe/trunk/test/Frontend/rewrite-includes-header-cmd-line.c
> Modified:
>     cfe/trunk/lib/Rewrite/Frontend/InclusionRewriter.cpp

This patch breaks Hexagon's buildbots:

 http://lab.llvm.org:8011/builders/clang-hexagon-elf/builds/803

        ********************
        Failing Tests (1):
            Clang :: Driver/qa_override.c

To reproduce, in a linux box, configure with:

$ ../configure --disable-bindings --build=x86_64-linux-gnu
--host=x86_64-linux-gnu --target=hexagon-unknown-elf
--enable-targets=hexagon --build=hexagon-unknown-elf
--host=hexagon-unknown-elf --without-llvmgcc --without-llvmgxx
--enable-optimized --enable-assertions
$ make && make check-all

Thanks,
Sebastian

>
> Modified: cfe/trunk/lib/Rewrite/Frontend/InclusionRewriter.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Rewrite/Frontend/InclusionRewriter.cpp?rev=187207&r1=187206&r2=187207&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Rewrite/Frontend/InclusionRewriter.cpp (original)
> +++ cfe/trunk/lib/Rewrite/Frontend/InclusionRewriter.cpp Fri Jul 26 10:32:04 2013
> @@ -40,6 +40,7 @@ class InclusionRewriter : public PPCallb
>    Preprocessor &PP; ///< Used to find inclusion directives.
>    SourceManager &SM; ///< Used to read and manage source files.
>    raw_ostream &OS; ///< The destination stream for rewritten contents.
> +  const llvm::MemoryBuffer *PredefinesBuffer; ///< The preprocessor predefines.
>    bool ShowLineMarkers; ///< Show #line markers.
>    bool UseLineDirective; ///< Use of line directives or line markers.
>    typedef std::map<unsigned, FileChange> FileChangeMap;
> @@ -50,6 +51,9 @@ class InclusionRewriter : public PPCallb
>  public:
>    InclusionRewriter(Preprocessor &PP, raw_ostream &OS, bool ShowLineMarkers);
>    bool Process(FileID FileId, SrcMgr::CharacteristicKind FileType);
> +  void setPredefinesBuffer(const llvm::MemoryBuffer *Buf) {
> +    PredefinesBuffer = Buf;
> +  }
>  private:
>    virtual void FileChanged(SourceLocation Loc, FileChangeReason Reason,
>                             SrcMgr::CharacteristicKind FileType,
> @@ -89,7 +93,7 @@ private:
>  /// Initializes an InclusionRewriter with a \p PP source and \p OS destination.
>  InclusionRewriter::InclusionRewriter(Preprocessor &PP, raw_ostream &OS,
>                                       bool ShowLineMarkers)
> -    : PP(PP), SM(PP.getSourceManager()), OS(OS),
> +    : PP(PP), SM(PP.getSourceManager()), OS(OS), PredefinesBuffer(0),
>      ShowLineMarkers(ShowLineMarkers),
>      LastInsertedFileChange(FileChanges.end()) {
>    // If we're in microsoft mode, use normal #line instead of line markers.
> @@ -214,6 +218,11 @@ void InclusionRewriter::OutputContentUpT
>                                            bool EnsureNewline) {
>    if (WriteTo <= WriteFrom)
>      return;
> +  if (&FromFile == PredefinesBuffer) {
> +    // Ignore the #defines of the predefines buffer.
> +    WriteFrom = WriteTo;
> +    return;
> +  }
>    OS.write(FromFile.getBufferStart() + WriteFrom, WriteTo - WriteFrom);
>    // count lines manually, it's faster than getPresumedLoc()
>    Line += std::count(FromFile.getBufferStart() + WriteFrom,
> @@ -525,6 +534,8 @@ void clang::RewriteIncludesInInput(Prepr
>    do {
>      PP.Lex(Tok);
>    } while (Tok.isNot(tok::eof));
> +  Rewrite->setPredefinesBuffer(SM.getBuffer(PP.getPredefinesFileID()));
> +  Rewrite->Process(PP.getPredefinesFileID(), SrcMgr::C_User);
>    Rewrite->Process(SM.getMainFileID(), SrcMgr::C_User);
>    OS->flush();
>  }
>
> Added: cfe/trunk/test/Frontend/rewrite-includes-header-cmd-line.c
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Frontend/rewrite-includes-header-cmd-line.c?rev=187207&view=auto
> ==============================================================================
> --- cfe/trunk/test/Frontend/rewrite-includes-header-cmd-line.c (added)
> +++ cfe/trunk/test/Frontend/rewrite-includes-header-cmd-line.c Fri Jul 26 10:32:04 2013
> @@ -0,0 +1,7 @@
> +// RUN: %clang_cc1 -E -frewrite-includes -include rewrite-includes2.h -I %S/Inputs %s -o - | FileCheck -strict-whitespace %s
> +
> +// STARTMAIN
> +
> +// CHECK-NOT: {{^}}#define
> +// CHECK: included_line2
> +// CHECK: {{^}}// STARTMAIN{{$}}
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits



-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
hosted by The Linux Foundation



More information about the cfe-commits mailing list