Fixed a crasher that could happen if:
authorGreg Clayton <gclayton@apple.com>
Wed, 11 Feb 2015 00:04:33 +0000 (00:04 +0000)
committerGreg Clayton <gclayton@apple.com>
Wed, 11 Feb 2015 00:04:33 +0000 (00:04 +0000)
- you have a type that contains a typedef to a VectorType or an ExtVectorType
- that type is returned from an ARM function that LLDB steps over so we try to figure out the return type
- we try to determine if the type is a homogeneous aggregate type and we crash

We get not using getAs() when we should have been and using llvm::cast caused an assertion crash when the typedef type didn't return a valid VectorType or ExtVectorType.

<rdar://problem/19646550>

llvm-svn: 228771

lldb/source/Symbol/ClangASTType.cpp

index eaff90a..8e3d7bd 100644 (file)
@@ -493,7 +493,7 @@ ClangASTType::IsHomogeneousAggregate (ClangASTType* base_type_ptr) const
                             }
                             else if (field_qual_type->isVectorType() || field_qual_type->isExtVectorType())
                             {
-                                const clang::VectorType *array = llvm::cast<clang::VectorType>(field_qual_type.getTypePtr());
+                                const clang::VectorType *array = field_qual_type.getTypePtr()->getAs<clang::VectorType>();
                                 if (array && array->getNumElements() <= 4)
                                 {
                                     if (num_fields == 0)