diff options
author | Ted Kremenek <kremenek@apple.com> | 2008-11-13 05:05:34 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2008-11-13 05:05:34 +0000 |
commit | 76dba7b67a36b2d6311e4ad4714df5dbd39dbebe (patch) | |
tree | ed643921cbb11d241eba2089e5743fa834a7b883 | |
parent | f3edc2fa81b71c32fbc3546be6c0012ff77ec07c (diff) |
GRExprEngine::VisitInitListExpr:
- Don't crash on vector types.
- Handle typedefs.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59220 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Analysis/GRExprEngine.cpp | 4 | ||||
-rw-r--r-- | test/Analysis/misc-ps.m | 8 |
2 files changed, 10 insertions, 2 deletions
diff --git a/lib/Analysis/GRExprEngine.cpp b/lib/Analysis/GRExprEngine.cpp index 9e389e8b12..35577f6232 100644 --- a/lib/Analysis/GRExprEngine.cpp +++ b/lib/Analysis/GRExprEngine.cpp @@ -1777,7 +1777,7 @@ void GRExprEngine::VisitInitListExpr(InitListExpr* E, NodeTy* Pred, NodeSet& Dst) { const GRState* state = GetState(Pred); - QualType T = E->getType(); + QualType T = getContext().getCanonicalType(E->getType()); unsigned NumInitElements = E->getNumInits(); if (T->isArrayType() || T->isStructureType()) { @@ -1847,7 +1847,7 @@ void GRExprEngine::VisitInitListExpr(InitListExpr* E, NodeTy* Pred, return; } - if (T->isUnionType()) { + if (T->isUnionType() || T->isVectorType()) { // FIXME: to be implemented. MakeNode(Dst, E, Pred, state); return; diff --git a/test/Analysis/misc-ps.m b/test/Analysis/misc-ps.m index 0340c027cd..14adf5937e 100644 --- a/test/Analysis/misc-ps.m +++ b/test/Analysis/misc-ps.m @@ -56,3 +56,11 @@ void checkaccess_union() { ).__i))) & 0xff00) >> 8) == 1) ret = 1; } + +// InitListExpr processing + +typedef float __m128 __attribute__((__vector_size__(16), __may_alias__)); +__m128 return128() { + return __extension__(__m128) { 0.0f, 0.0f, 0.0f, 0.0f }; +} + |