]> granicus.if.org Git - clang/commitdiff
Move the initialization of SEL/objc_selector from Sema::Sema() to Sema::ActOnTranslat...
authorSteve Naroff <snaroff@apple.com>
Sun, 24 Feb 2008 16:25:02 +0000 (16:25 +0000)
committerSteve Naroff <snaroff@apple.com>
Sun, 24 Feb 2008 16:25:02 +0000 (16:25 +0000)
Bug submitted by David Chisnall (thanks!).

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47538 91177308-0d34-0410-b5e6-96231b3b80d8

Sema/Sema.cpp

index ff8e18248314422723376467f73e774080f45264..5b7a3094d12d00a382f329781ce11fec2f4de0b0 100644 (file)
@@ -57,9 +57,20 @@ void Sema::ActOnTranslationUnitScope(SourceLocation Loc, Scope *S) {
   ObjCInterfaceDecl *IDecl = it->getDecl();
   IDecl->getIdentifier()->setFETokenInfo(IDecl);
   TUScope->AddDecl(IDecl);
-  t = cast<TypedefType>(Context.getObjCSelType().getTypePtr());
-  t->getDecl()->getIdentifier()->setFETokenInfo(t->getDecl());
-  TUScope->AddDecl(t->getDecl());
+  
+  // Synthesize "typedef struct objc_selector *SEL;"
+  RecordDecl *SelTag = new RecordDecl(Decl::Struct, SourceLocation(), 
+                                      &Context.Idents.get("objc_selector"), 0);
+  SelTag->getIdentifier()->setFETokenInfo(SelTag);
+  TUScope->AddDecl(SelTag);
+  
+  QualType SelT = Context.getPointerType(Context.getTagDeclType(SelTag));
+  TypedefDecl *SelTypedef = new TypedefDecl(SourceLocation(),
+                                            &Context.Idents.get("SEL"),
+                                            SelT, 0);
+  SelTypedef->getIdentifier()->setFETokenInfo(SelTypedef);
+  TUScope->AddDecl(SelTypedef);
+  Context.setObjCSelType(SelTypedef);
 }
 
 Sema::Sema(Preprocessor &pp, ASTContext &ctxt, ASTConsumer &consumer)
@@ -81,6 +92,8 @@ Sema::Sema(Preprocessor &pp, ASTContext &ctxt, ASTConsumer &consumer)
   KnownFunctionIDs[id_vsprintf]  = &IT.get("vsprintf");
   KnownFunctionIDs[id_vprintf]   = &IT.get("vprintf");
 
+  // FIXME: Move this initialization up to Sema::ActOnTranslationUnitScope()
+  // and make sure the decls get inserted into TUScope!
   if (PP.getLangOptions().ObjC1) {
     // Synthesize "typedef struct objc_class *Class;"
     RecordDecl *ClassTag = new RecordDecl(Decl::Struct, SourceLocation(), 
@@ -107,16 +120,6 @@ Sema::Sema(Preprocessor &pp, ASTContext &ctxt, ASTConsumer &consumer)
                                              &Context.Idents.get("id"),
                                              ObjT, 0);
     Context.setObjCIdType(IdTypedef);
-    
-    // Synthesize "typedef struct objc_selector *SEL;"
-    RecordDecl *SelTag = new RecordDecl(Decl::Struct, SourceLocation(), 
-                                          &IT.get("objc_selector"), 0);
-    QualType SelT = Context.getPointerType(Context.getTagDeclType(SelTag));
-    TypedefDecl *SelTypedef = new TypedefDecl(SourceLocation(),
-                                              &Context.Idents.get("SEL"),
-                                              SelT, 0);
-    Context.setObjCSelType(SelTypedef);
-    
   }
   TUScope = 0;
 }