diff --git a/lib/Linker/LinkModules.cpp b/lib/Linker/LinkModules.cpp index e36fbafc6fa..14fe9959db8 100644 --- a/lib/Linker/LinkModules.cpp +++ b/lib/Linker/LinkModules.cpp @@ -102,12 +102,8 @@ static bool RecursiveResolveTypesI(const PATypeHolder &DestTy, // Otherwise, resolve the used type used by this derived type... switch (DestTyT->getTypeID()) { - case Type::IntegerTyID: { - if (cast(DestTyT)->getBitWidth() != - cast(SrcTyT)->getBitWidth()) - return true; - return false; - } + default: + return true; case Type::FunctionTyID: { if (cast(DestTyT)->isVarArg() != cast(SrcTyT)->isVarArg() || @@ -122,7 +118,8 @@ static bool RecursiveResolveTypesI(const PATypeHolder &DestTy, } case Type::StructTyID: { if (getST(DestTy)->getNumContainedTypes() != - getST(SrcTy)->getNumContainedTypes()) return 1; + getST(SrcTy)->getNumContainedTypes()) + return true; for (unsigned i = 0, e = getST(DestTy)->getNumContainedTypes(); i != e; ++i) if (RecursiveResolveTypesI(getST(DestTy)->getContainedType(i), getST(SrcTy)->getContainedType(i), Pointers)) @@ -136,6 +133,13 @@ static bool RecursiveResolveTypesI(const PATypeHolder &DestTy, return RecursiveResolveTypesI(DAT->getElementType(), SAT->getElementType(), Pointers); } + case Type::VectorTyID: { + const VectorType *DVT = cast(DestTy.get()); + const VectorType *SVT = cast(SrcTy.get()); + if (DVT->getNumElements() != SVT->getNumElements()) return true; + return RecursiveResolveTypesI(DVT->getElementType(), SVT->getElementType(), + Pointers); + } case Type::PointerTyID: { // If this is a pointer type, check to see if we have already seen it. If // so, we are in a recursive branch. Cut off the search now. We cannot use @@ -155,7 +159,6 @@ static bool RecursiveResolveTypesI(const PATypeHolder &DestTy, Pointers.pop_back(); return Result; } - default: assert(0 && "Unexpected type!"); return true; } }