r203213 - [Preprocessor] Pass TranslationUnitKind to the preprocessor and if it is TU_Prefix

Jordan Rose jordan_rose at apple.com
Fri Mar 7 09:45:12 PST 2014


Wouldn't we want to avoid this warning for modules as well?

Or rather, it probably doesn't matter for modules, so should we use an existing flag instead? (Is there one?)

Jordan


On Mar 6, 2014, at 23:47 , Argyrios Kyrtzidis <akyrtzi at gmail.com> wrote:

> Author: akirtzidis
> Date: Fri Mar  7 01:47:58 2014
> New Revision: 203213
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=203213&view=rev
> Log:
> [Preprocessor] Pass TranslationUnitKind to the preprocessor and if it is TU_Prefix
> avoid warning for unused macros.
> 
> rdar://15034698
> 
> Modified:
>    cfe/trunk/include/clang/Frontend/CompilerInstance.h
>    cfe/trunk/include/clang/Lex/Preprocessor.h
>    cfe/trunk/lib/Frontend/ChainedIncludesSource.cpp
>    cfe/trunk/lib/Frontend/CompilerInstance.cpp
>    cfe/trunk/lib/Frontend/FrontendAction.cpp
>    cfe/trunk/lib/Lex/PPLexerChange.cpp
>    cfe/trunk/lib/Lex/Preprocessor.cpp
>    cfe/trunk/test/Index/preamble.c
> 
> Modified: cfe/trunk/include/clang/Frontend/CompilerInstance.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/CompilerInstance.h?rev=203213&r1=203212&r2=203213&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/Frontend/CompilerInstance.h (original)
> +++ cfe/trunk/include/clang/Frontend/CompilerInstance.h Fri Mar  7 01:47:58 2014
> @@ -561,7 +561,7 @@ public:
> 
>   /// Create the preprocessor, using the invocation, file, and source managers,
>   /// and replace any existing one with it.
> -  void createPreprocessor();
> +  void createPreprocessor(TranslationUnitKind TUKind);
> 
>   /// Create the AST context.
>   void createASTContext();
> 
> Modified: cfe/trunk/include/clang/Lex/Preprocessor.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Lex/Preprocessor.h?rev=203213&r1=203212&r2=203213&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/Lex/Preprocessor.h (original)
> +++ cfe/trunk/include/clang/Lex/Preprocessor.h Fri Mar  7 01:47:58 2014
> @@ -200,6 +200,9 @@ class Preprocessor : public RefCountedBa
>   /// avoid tearing the Lexer and etc. down).
>   bool IncrementalProcessing;
> 
> +  /// The kind of translation unit we are processing.
> +  TranslationUnitKind TUKind;
> +
>   /// \brief The code-completion handler.
>   CodeCompletionHandler *CodeComplete;
> 
> @@ -439,7 +442,8 @@ public:
>                IdentifierInfoLookup *IILookup = 0,
>                bool OwnsHeaderSearch = false,
>                bool DelayInitialization = false,
> -               bool IncrProcessing = false);
> +               bool IncrProcessing = false,
> +               TranslationUnitKind TUKind = TU_Complete);
> 
>   ~Preprocessor();
> 
> 
> Modified: cfe/trunk/lib/Frontend/ChainedIncludesSource.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/ChainedIncludesSource.cpp?rev=203213&r1=203212&r2=203213&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Frontend/ChainedIncludesSource.cpp (original)
> +++ cfe/trunk/lib/Frontend/ChainedIncludesSource.cpp Fri Mar  7 01:47:58 2014
> @@ -104,7 +104,7 @@ ChainedIncludesSource::create(CompilerIn
>                                                   &Clang->getTargetOpts()));
>     Clang->createFileManager();
>     Clang->createSourceManager(Clang->getFileManager());
> -    Clang->createPreprocessor();
> +    Clang->createPreprocessor(TU_Prefix);
>     Clang->getDiagnosticClient().BeginSourceFile(Clang->getLangOpts(),
>                                                  &Clang->getPreprocessor());
>     Clang->createASTContext();
> 
> Modified: cfe/trunk/lib/Frontend/CompilerInstance.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInstance.cpp?rev=203213&r1=203212&r2=203213&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Frontend/CompilerInstance.cpp (original)
> +++ cfe/trunk/lib/Frontend/CompilerInstance.cpp Fri Mar  7 01:47:58 2014
> @@ -223,7 +223,7 @@ void CompilerInstance::createSourceManag
> 
> // Preprocessor
> 
> -void CompilerInstance::createPreprocessor() {
> +void CompilerInstance::createPreprocessor(TranslationUnitKind TUKind) {
>   const PreprocessorOptions &PPOpts = getPreprocessorOpts();
> 
>   // Create a PTH manager if we are using some form of a token cache.
> @@ -240,7 +240,10 @@ void CompilerInstance::createPreprocesso
>   PP = new Preprocessor(&getPreprocessorOpts(),
>                         getDiagnostics(), getLangOpts(), &getTarget(),
>                         getSourceManager(), *HeaderInfo, *this, PTHMgr,
> -                        /*OwnsHeaderSearch=*/true);
> +                        /*OwnsHeaderSearch=*/true,
> +                        /*DelayInitialization=*/false,
> +                        /*IncrProcessing=*/false,
> +                        TUKind);
> 
>   // Note that this is different then passing PTHMgr to Preprocessor's ctor.
>   // That argument is used as the IdentifierInfoLookup argument to
> 
> Modified: cfe/trunk/lib/Frontend/FrontendAction.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/FrontendAction.cpp?rev=203213&r1=203212&r2=203213&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Frontend/FrontendAction.cpp (original)
> +++ cfe/trunk/lib/Frontend/FrontendAction.cpp Fri Mar  7 01:47:58 2014
> @@ -291,7 +291,7 @@ bool FrontendAction::BeginSourceFile(Com
>   }
> 
>   // Set up the preprocessor.
> -  CI.createPreprocessor();
> +  CI.createPreprocessor(getTranslationUnitKind());
> 
>   // Inform the diagnostic client we are processing a source file.
>   CI.getDiagnosticClient().BeginSourceFile(CI.getLangOpts(),
> 
> Modified: cfe/trunk/lib/Lex/PPLexerChange.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/PPLexerChange.cpp?rev=203213&r1=203212&r2=203213&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Lex/PPLexerChange.cpp (original)
> +++ cfe/trunk/lib/Lex/PPLexerChange.cpp Fri Mar  7 01:47:58 2014
> @@ -427,11 +427,15 @@ bool Preprocessor::HandleEndOfFile(Token
>   if (!isIncrementalProcessingEnabled())
>     CurPPLexer = 0;
> 
> -  // This is the end of the top-level file. 'WarnUnusedMacroLocs' has collected
> -  // all macro locations that we need to warn because they are not used.
> -  for (WarnUnusedMacroLocsTy::iterator
> -         I=WarnUnusedMacroLocs.begin(), E=WarnUnusedMacroLocs.end(); I!=E; ++I)
> -    Diag(*I, diag::pp_macro_not_used);
> +  if (TUKind != TU_Prefix) {
> +    // This is the end of the top-level file. 'WarnUnusedMacroLocs' has
> +    // collected all macro locations that we need to warn because they are not
> +    // used.
> +    for (WarnUnusedMacroLocsTy::iterator
> +           I=WarnUnusedMacroLocs.begin(), E=WarnUnusedMacroLocs.end();
> +           I!=E; ++I)
> +      Diag(*I, diag::pp_macro_not_used);
> +  }
> 
>   // If we are building a module that has an umbrella header, make sure that
>   // each of the headers within the directory covered by the umbrella header
> 
> Modified: cfe/trunk/lib/Lex/Preprocessor.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/Preprocessor.cpp?rev=203213&r1=203212&r2=203213&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Lex/Preprocessor.cpp (original)
> +++ cfe/trunk/lib/Lex/Preprocessor.cpp Fri Mar  7 01:47:58 2014
> @@ -59,11 +59,13 @@ Preprocessor::Preprocessor(IntrusiveRefC
>                            const TargetInfo *target, SourceManager &SM,
>                            HeaderSearch &Headers, ModuleLoader &TheModuleLoader,
>                            IdentifierInfoLookup *IILookup, bool OwnsHeaders,
> -                           bool DelayInitialization, bool IncrProcessing)
> +                           bool DelayInitialization, bool IncrProcessing,
> +                           TranslationUnitKind TUKind)
>     : PPOpts(PPOpts), Diags(&diags), LangOpts(opts), Target(target),
>       FileMgr(Headers.getFileMgr()), SourceMgr(SM), HeaderInfo(Headers),
>       TheModuleLoader(TheModuleLoader), ExternalSource(0),
>       Identifiers(opts, IILookup), IncrementalProcessing(IncrProcessing),
> +      TUKind(TUKind),
>       CodeComplete(0), CodeCompletionFile(0), CodeCompletionOffset(0),
>       LastTokenWasAt(false), ModuleImportExpectsIdentifier(false),
>       CodeCompletionReached(0), SkipMainFilePreamble(0, true), CurPPLexer(0),
> 
> Modified: cfe/trunk/test/Index/preamble.c
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Index/preamble.c?rev=203213&r1=203212&r2=203213&view=diff
> ==============================================================================
> --- cfe/trunk/test/Index/preamble.c (original)
> +++ cfe/trunk/test/Index/preamble.c Fri Mar  7 01:47:58 2014
> @@ -2,13 +2,16 @@
> #include "preamble.h"
> #include "preamble-with-error.h"
> 
> +#define MACRO_UNUSED 1
> +#define MACRO_USED 2
> +
> int wibble(int);
> 
> void f(int x) {
> -  
> +  x = MACRO_USED
> }
> // RUN: c-index-test -write-pch %t.pch -x c-header %S/Inputs/prefix.h
> -// RUN: env CINDEXTEST_EDITING=1 c-index-test -test-load-source-reparse 5 local -I %S/Inputs -include %t %s 2> %t.stderr.txt | FileCheck %s
> +// RUN: env CINDEXTEST_EDITING=1 c-index-test -test-load-source-reparse 5 local -I %S/Inputs -include %t %s -Wunused-macros 2> %t.stderr.txt | FileCheck %s
> // RUN: FileCheck -check-prefix CHECK-DIAG %s < %t.stderr.txt
> // CHECK: preamble.h:1:12: FunctionDecl=bar:1:12 (Definition) Extent=[1:1 - 6:2]
> // CHECK: preamble.h:4:3: BinaryOperator= Extent=[4:3 - 4:13]
> @@ -16,10 +19,13 @@ void f(int x) {
> // CHECK: preamble.h:4:9: UnexposedExpr=ptr1:3:10 Extent=[4:9 - 4:13]
> // CHECK: preamble.h:4:9: DeclRefExpr=ptr1:3:10 Extent=[4:9 - 4:13]
> // CHECK: preamble.h:5:10: IntegerLiteral= Extent=[5:10 - 5:11]
> -// CHECK: preamble.c:5:5: FunctionDecl=wibble:5:5 Extent=[5:1 - 5:16]
> -// CHECK: preamble.c:5:15: ParmDecl=:5:15 (Definition) Extent=[5:12 - 5:15]
> +// CHECK: preamble.c:8:5: FunctionDecl=wibble:8:5 Extent=[8:1 - 8:16]
> +// CHECK: preamble.c:8:15: ParmDecl=:8:15 (Definition) Extent=[8:12 - 8:15]
> // CHECK-DIAG: preamble.h:4:7:{4:9-4:13}: warning: incompatible pointer types assigning to 'int *' from 'float *'
> -// RUN: env CINDEXTEST_EDITING=1 c-index-test -code-completion-at=%s:8:1 -I %S/Inputs -include %t %s 2> %t.stderr.txt | FileCheck -check-prefix CHECK-CC %s
> +// FIXME: Should see:
> +//     preamble.c:5:9: warning: macro is not used
> +// CHECK-DIAG-NOT: preamble.c:6:9: warning: macro is not used
> +// RUN: env CINDEXTEST_EDITING=1 c-index-test -code-completion-at=%s:11:1 -I %S/Inputs -include %t %s 2> %t.stderr.txt | FileCheck -check-prefix CHECK-CC %s
> // CHECK-CC: FunctionDecl:{ResultType int}{TypedText bar}{LeftParen (}{Placeholder int i}{RightParen )} (50)
> // CHECK-CC: FunctionDecl:{ResultType void}{TypedText f}{LeftParen (}{Placeholder int x}{RightParen )} (50)
> // CHECK-CC: FunctionDecl:{ResultType int}{TypedText foo}{LeftParen (}{Placeholder int}{RightParen )} (50)
> 
> 
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits




More information about the cfe-commits mailing list