aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/Analysis/GRExprEngine.cpp4
-rw-r--r--test/Analysis/misc-ps.m8
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 };
+}
+