"One" line fix for -parse-noop failure, "id" and several other things

were being treated as type names for non-Objective-C files.
 - Other lines are just because MinimalAction didn't have access to
   the LangOptions.

llvm-svn: 58498
This commit is contained in:
Daniel Dunbar 2008-10-31 08:56:51 +00:00
parent 0c248e7ed8
commit f8362f9e5d
6 changed files with 20 additions and 10 deletions

View File

@ -22,7 +22,7 @@ namespace {
class ParserPrintActions : public MinimalAction {
public:
ParserPrintActions(IdentifierTable &IT) : MinimalAction(IT) {}
ParserPrintActions(Preprocessor &PP) : MinimalAction(PP) {}
// Printing Functions which also must call MinimalAction
@ -568,6 +568,6 @@ namespace {
};
}
MinimalAction *clang::CreatePrintParserActionsAction(IdentifierTable &IT) {
return new ParserPrintActions(IT);
MinimalAction *clang::CreatePrintParserActionsAction(Preprocessor &PP) {
return new ParserPrintActions(PP);
}

View File

@ -1304,12 +1304,12 @@ static void ProcessInputFile(Preprocessor &PP, PreprocessorFactory &PPF,
break;
case ParseNoop: // -parse-noop
ParseFile(PP, new MinimalAction(PP.getIdentifierTable()));
ParseFile(PP, new MinimalAction(PP));
ClearSourceMgr = true;
break;
case ParsePrintCallbacks:
ParseFile(PP, CreatePrintParserActionsAction(PP.getIdentifierTable()));
ParseFile(PP, CreatePrintParserActionsAction(PP));
ClearSourceMgr = true;
break;

View File

@ -39,7 +39,7 @@ void DoRewriteTest(Preprocessor &PP, const std::string &InFileName,
/// CreatePrintParserActionsAction - Return the actions implementation that
/// implements the -parse-print-callbacks option.
MinimalAction *CreatePrintParserActionsAction(IdentifierTable &);
MinimalAction *CreatePrintParserActionsAction(Preprocessor &PP);
/// EmitLLVMFromASTs - Implement -emit-llvm, which generates llvm IR from C.
void EmitLLVMFromASTs(Preprocessor &PP, bool PrintStats);

View File

@ -31,6 +31,7 @@ namespace clang {
class Selector;
class InitListDesignations;
// Lex.
class Preprocessor;
class Token;
/// Action - As the parser reads the input file and recognizes the productions
@ -923,8 +924,9 @@ class MinimalAction : public Action {
/// For example, user-defined classes, built-in "id" type, etc.
Scope *TUScope;
IdentifierTable &Idents;
Preprocessor &PP;
public:
MinimalAction(IdentifierTable &IT) : Idents(IT) {}
MinimalAction(Preprocessor &pp);
/// isTypeName - This looks at the IdentifierInfo::FETokenInfo field to
/// determine whether the name is a typedef or not in this scope.

View File

@ -28,12 +28,16 @@ struct TypeNameInfo {
}
};
void MinimalAction:: ActOnTranslationUnitScope(SourceLocation Loc, Scope *S) {
MinimalAction::MinimalAction(Preprocessor &pp)
: Idents(pp.getIdentifierTable()), PP(pp) {}
void MinimalAction::ActOnTranslationUnitScope(SourceLocation Loc, Scope *S) {
TUScope = S;
if (!PP.getLangOptions().ObjC1) return;
// recognize the ObjC built-in type identifiers.
IdentifierInfo *II;
TypeNameInfo *TI;
// recognize the ObjC built-in type identifiers.
II = &Idents.get("id");
TI = new TypeNameInfo(1, II->getFETokenInfo<TypeNameInfo>());
II->setFETokenInfo(TI);

View File

@ -0,0 +1,4 @@
// RUN: clang -verify -parse-noop %t
void add_attribute(id) int id; {}