]> granicus.if.org Git - clang/commitdiff
"Fix" PR3021, don't crash on generating record types when we can't
authorDaniel Dunbar <daniel@zuster.org>
Sat, 8 Nov 2008 04:42:29 +0000 (04:42 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Sat, 8 Nov 2008 04:42:29 +0000 (04:42 +0000)
generate the type of a member.

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

lib/CodeGen/CGDebugInfo.cpp
test/CodeGen/PR3021-debug-info-and-typeof.c [new file with mode: 0644]

index 478f862775eee28ba7aef0c15d7ea501c85e79f2..08cd129b63fcafc72318851e46fc13d1e2bc47f7 100644 (file)
@@ -363,6 +363,7 @@ CGDebugInfo::getOrCreateFunctionType(QualType type, llvm::CompileUnitDesc *Unit)
     for (unsigned int i =0; i < FTPro->getNumArgs(); i++) {
       QualType ParamType = FTPro->getArgType(i);
       ArgTy = getOrCreateType(ParamType, Unit);
+      // FIXME: Remove once we support all types.
       if (ArgTy) Elements.push_back(ArgTy);
     }
   }
@@ -407,8 +408,11 @@ void CGDebugInfo::getOrCreateRecordType(QualType type,
   for (int i = 0; i < NumMembers; i++) {
     FieldDecl *Member = RecDecl->getMember(i);
     llvm::TypeDesc *MemberTy = getOrCreateType(Member->getType(), Unit);
-    MemberTy->setOffset(RL.getFieldOffset(i));
-    Elements.push_back(MemberTy);
+    // FIXME: Remove once we support all types.
+    if (MemberTy) {
+      MemberTy->setOffset(RL.getFieldOffset(i));
+      Elements.push_back(MemberTy);
+    }
   }
 
   // Fill in the blanks.
diff --git a/test/CodeGen/PR3021-debug-info-and-typeof.c b/test/CodeGen/PR3021-debug-info-and-typeof.c
new file mode 100644 (file)
index 0000000..607462d
--- /dev/null
@@ -0,0 +1,5 @@
+// RUN: clang -o %t --emit-llvm -g %s
+
+void convert(void) {
+  struct { typeof(0) f0; } v0;
+}