Author: Akira Hatanaka Date: 2019-11-22T12:57:24-08:00 New Revision: a6150b48cea00ab31e9335cc73770327acc4cb3a
URL: https://github.com/llvm/llvm-project/commit/a6150b48cea00ab31e9335cc73770327acc4cb3a DIFF: https://github.com/llvm/llvm-project/commit/a6150b48cea00ab31e9335cc73770327acc4cb3a.diff LOG: [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 Added: Modified: clang/lib/Sema/SemaExpr.cpp clang/test/Sema/fp16vec-sema.c Removed: ################################################################################ diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index 3be8af1dd9e7..63a189a102fc 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 aefb5f86a14b..3d028224d22d 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; +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits