Do not return true from isSized for things without a size (like functions and
authorChris Lattner <sabre@nondot.org>
Mon, 24 Jan 2005 16:00:52 +0000 (16:00 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 24 Jan 2005 16:00:52 +0000 (16:00 +0000)
labels) even though they are concrete.  This fixes the DSA regressions from
last night.

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

include/llvm/Type.h

index 2aac381d0bda871d96718bc54e8c08b05926c424..a4035cb1fb0d1c980be59f24e949af4530b2e466 100644 (file)
@@ -201,7 +201,16 @@ public:
   /// TargetData subsystem to do this.
   ///
   bool isSized() const {
-    return !isAbstract() || ID == PointerTyID || isSizedDerivedType();
+    // If it's a primative, it is always sized.
+    if (ID >= BoolTyID && ID <= DoubleTyID || ID == PointerTyID)
+      return true;
+    // If it is not something that can have a size (e.g. a function or label),
+    // it doesn't have a size.
+    if (ID != StructTyID && ID != ArrayTyID && ID != PackedTyID)
+      return false;
+    // If it is something that can have a size and it's concrete, it definitely
+    // has a size, otherwise we have to try harder to decide.
+    return !isAbstract() || isSizedDerivedType();
   }
 
   /// getPrimitiveSize - Return the basic size of this type if it is a primitive