diff options
-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 }; +} + |