diff options
| author | Zhongxing Xu <xuzhongxing@gmail.com> | 2008-11-13 07:30:58 +0000 |
|---|---|---|
| committer | Zhongxing Xu <xuzhongxing@gmail.com> | 2008-11-13 07:30:58 +0000 |
| commit | a70987eb8214f72bed95f6b5bc1257f513f2b3eb (patch) | |
| tree | 22eea778c8c846f0062200a3de85018ebd85908c /clang/lib | |
| parent | 9a04b9dd8b3a126191f9ad94e75005d10b49a98b (diff) | |
| download | bcm5719-llvm-a70987eb8214f72bed95f6b5bc1257f513f2b3eb.tar.gz bcm5719-llvm-a70987eb8214f72bed95f6b5bc1257f513f2b3eb.zip | |
Change AllocaRegion to subclass TypedRegion. We need to know ElementRegion's
type when assigning to it.
llvm-svn: 59229
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/Analysis/MemRegion.cpp | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/clang/lib/Analysis/MemRegion.cpp b/clang/lib/Analysis/MemRegion.cpp index ae575f11646..a292d98e605 100644 --- a/clang/lib/Analysis/MemRegion.cpp +++ b/clang/lib/Analysis/MemRegion.cpp @@ -105,8 +105,18 @@ void ElementRegion::Profile(llvm::FoldingSetNodeID& ID) const { QualType ElementRegion::getType(ASTContext& C) const { QualType T = cast<TypedRegion>(superRegion)->getType(C); - ArrayType* AT = cast<ArrayType>(T.getTypePtr()); - return AT->getElementType(); + + if (isa<ArrayType>(T.getTypePtr())) { + ArrayType* AT = cast<ArrayType>(T.getTypePtr()); + return AT->getElementType(); + } + else if (isa<AllocaRegion>(superRegion)) { + PointerType* PtrT = cast<PointerType>(T.getTypePtr()); + QualType PTy = PtrT->getPointeeType(); + return C.getCanonicalType(PTy); + } + else + assert(0 && "SuperRegion type unsupported."); } //===----------------------------------------------------------------------===// |

