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

Argyrios Kyrtzidis akyrtzi at gmail.com
Sat Mar 8 13:25:18 PST 2014


In r203360, I changed the check to check for TU_Complete.

On Mar 7, 2014, at 9:45 AM, Jordan Rose <jordan_rose at apple.com> wrote:

> 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