]> granicus.if.org Git - clang/commitdiff
Finish off the refactoring of type handling stuff. Now we recompile every
authorChris Lattner <sabre@nondot.org>
Wed, 6 Feb 2008 04:51:19 +0000 (04:51 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 6 Feb 2008 04:51:19 +0000 (04:51 +0000)
tag decl after it has been completed

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

CodeGen/ModuleBuilder.cpp
test/CodeGen/types.c

index c59ef447e660c6a4201c0a41c217cd356352d141..8d3207a19cec1618ba74e94031dbf6e336569f54 100644 (file)
@@ -71,9 +71,19 @@ namespace {
         // FIXME: implement C++ linkage, C linkage works mostly by C
         // language reuse already.
       } else {
-        Builder->EmitType(cast<TypeDecl>(D));
+        assert(isa<TypeDecl>(D) && "Unknown top level decl");
+        // TODO: handle debug info?
       }
     }
+    
+    /// HandleTagDeclDefinition - This callback is invoked each time a TagDecl
+    /// (e.g. struct, union, enum, class) is completed.  This allows the client to
+    /// hack on the type, which can occur at any point in the file (because these
+    /// can be defined in declspecs).
+    virtual void HandleTagDeclDefinition(TagDecl *D) {
+      Builder->EmitType(D);
+    }
+    
   };
 }
 
index 01286e89621c1e1354e266e488c57a037d003330..2bbcec106a7dabdbfea852221191f2f3146d3987 100644 (file)
@@ -1,4 +1,4 @@
-// RUN: clang -emit-llvm %s
+// RUN: clang -emit-llvm <%s
 
 struct FileName {
     struct FileName *next;
@@ -10,7 +10,12 @@ struct ieeeExternal {
 } *exthead;
 
 
-void f()
+void test1()
 {
     struct ieeeExternal *exttmp = exthead;
 }
+
+struct MpegEncContext;
+typedef struct MpegEncContext {int pb;} MpegEncContext;
+static void test2(void) {MpegEncContext s; s.pb;}
+