No need to rescan types when they are created.
authorChris Lattner <sabre@nondot.org>
Wed, 3 Sep 2003 14:44:53 +0000 (14:44 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 3 Sep 2003 14:44:53 +0000 (14:44 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8339 91177308-0d34-0410-b5e6-96231b3b80d8

lib/VMCore/Type.cpp

index 57c6e636aec7b7a4ce59ab5febfff7f7de7bac62..d52986df57c4847be94f0f685ce2ac24241d9f7c 100644 (file)
@@ -343,35 +343,42 @@ FunctionType::FunctionType(const Type *Result,
                            bool IsVarArgs) : DerivedType(FunctionTyID), 
     ResultType(PATypeHandle(Result, this)),
     isVarArgs(IsVarArgs) {
+  bool isAbstract = Result->isAbstract();
   ParamTys.reserve(Params.size());
-  for (unsigned i = 0; i < Params.size(); ++i)
+  for (unsigned i = 0; i < Params.size(); ++i) {
     ParamTys.push_back(PATypeHandle(Params[i], this));
+    isAbstract |= Params[i]->isAbstract();
+  }
 
-  setAbstract(true);
-  setDerivedTypeProperties();
+  // Calculate whether or not this type is abstract
+  setAbstract(isAbstract);
 }
 
 StructType::StructType(const std::vector<const Type*> &Types)
   : CompositeType(StructTyID) {
   ETypes.reserve(Types.size());
+  bool isAbstract = false;
   for (unsigned i = 0; i < Types.size(); ++i) {
     assert(Types[i] != Type::VoidTy && "Void type in method prototype!!");
     ETypes.push_back(PATypeHandle(Types[i], this));
+    isAbstract |= Types[i]->isAbstract();
   }
-  setAbstract(true);
-  setDerivedTypeProperties();
+
+  // Calculate whether or not this type is abstract
+  setAbstract(isAbstract);
 }
 
 ArrayType::ArrayType(const Type *ElType, unsigned NumEl)
   : SequentialType(ArrayTyID, ElType) {
   NumElements = NumEl;
-  setAbstract(true);
-  setDerivedTypeProperties();
+
+  // Calculate whether or not this type is abstract
+  setAbstract(ElType->isAbstract());
 }
 
 PointerType::PointerType(const Type *E) : SequentialType(PointerTyID, E) {
-  setAbstract(true);
-  setDerivedTypeProperties();
+  // Calculate whether or not this type is abstract
+  setAbstract(E->isAbstract());
 }
 
 OpaqueType::OpaqueType() : DerivedType(OpaqueTyID) {