summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAkira Hatanaka <ahatanaka@apple.com>2019-11-22 12:26:54 -0800
committerAkira Hatanaka <ahatanaka@apple.com>2019-11-22 12:57:24 -0800
commita6150b48cea00ab31e9335cc73770327acc4cb3a (patch)
treedda99570c3068879b3c35b0550d79e34f4515592
parent2b795637b9024d76e53cd303ad74ac02ba22da5b (diff)
downloadbcm5719-llvm-a6150b48cea00ab31e9335cc73770327acc4cb3a.tar.gz
bcm5719-llvm-a6150b48cea00ab31e9335cc73770327acc4cb3a.zip
[Sema] Use the canonical type in function isVector
This fixes an assertion in Sema::CreateBuiltinBinOp that fails when one of the vector operand's element type is a typedef of __fp16. rdar://problem/55983556
-rw-r--r--clang/lib/Sema/SemaExpr.cpp2
-rw-r--r--clang/test/Sema/fp16vec-sema.c7
2 files changed, 8 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp
index 3be8af1dd9e..63a189a102f 100644
--- a/clang/lib/Sema/SemaExpr.cpp
+++ b/clang/lib/Sema/SemaExpr.cpp
@@ -8155,7 +8155,7 @@ Sema::CheckAssignmentConstraints(SourceLocation Loc,
/// type ElementType.
static bool isVector(QualType QT, QualType ElementType) {
if (const VectorType *VT = QT->getAs<VectorType>())
- return VT->getElementType() == ElementType;
+ return VT->getElementType().getCanonicalType() == ElementType;
return false;
}
diff --git a/clang/test/Sema/fp16vec-sema.c b/clang/test/Sema/fp16vec-sema.c
index aefb5f86a14..3d028224d22 100644
--- a/clang/test/Sema/fp16vec-sema.c
+++ b/clang/test/Sema/fp16vec-sema.c
@@ -4,6 +4,7 @@ typedef __fp16 half4 __attribute__ ((vector_size (8)));
typedef float float4 __attribute__ ((vector_size (16)));
typedef short short4 __attribute__ ((vector_size (8)));
typedef int int4 __attribute__ ((vector_size (16)));
+typedef __fp16 float16_t;
half4 hv0, hv1;
float4 fv0, fv1;
@@ -49,3 +50,9 @@ void testFP16Vec(int c) {
hv0++; // expected-error{{cannot increment value of type}}
++hv0; // expected-error{{cannot increment value of type}}
}
+
+void testTypeDef() {
+ __fp16 t0 __attribute__((vector_size (8)));
+ float16_t t1 __attribute__((vector_size (8)));
+ t1 = t0;
+}
OpenPOWER on IntegriCloud