This revision was landed with ongoing or failed builds. This revision was automatically updated to reflect the committed changes. Closed by commit rG94b0aec0f5c6: [OpenCL] Fix ICE with invalid use of half (authored by olestrohm).
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D103175/new/ https://reviews.llvm.org/D103175 Files: clang/lib/Sema/SemaExprCXX.cpp clang/test/SemaOpenCLCXX/half.clcpp Index: clang/test/SemaOpenCLCXX/half.clcpp =================================================================== --- /dev/null +++ clang/test/SemaOpenCLCXX/half.clcpp @@ -0,0 +1,15 @@ +//RUN: %clang_cc1 %s -triple spir -verify -fsyntax-only + +#pragma OPENCL EXTENSION cl_khr_fp16 : disable + +typedef half half2 __attribute__((ext_vector_type(2))); + +half f(half2 h2) { // expected-error{{declaring function return value of type 'half' is not allowed ; did you forget * ?}} + return h2.s0; // expected-error{{loading directly from pointer to type '__private half' requires cl_khr_fp16. Use vector data load builtin functions instead}} +} + +#pragma OPENCL EXTENSION cl_khr_fp16 : enable + +half f(half2 h2) { + return h2.s0; +} Index: clang/lib/Sema/SemaExprCXX.cpp =================================================================== --- clang/lib/Sema/SemaExprCXX.cpp +++ clang/lib/Sema/SemaExprCXX.cpp @@ -4193,7 +4193,9 @@ case ICK_Lvalue_To_Rvalue: { assert(From->getObjectKind() != OK_ObjCProperty); ExprResult FromRes = DefaultLvalueConversion(From); - assert(!FromRes.isInvalid() && "Can't perform deduced conversion?!"); + if (FromRes.isInvalid()) + return ExprError(); + From = FromRes.get(); FromType = From->getType(); break;
Index: clang/test/SemaOpenCLCXX/half.clcpp =================================================================== --- /dev/null +++ clang/test/SemaOpenCLCXX/half.clcpp @@ -0,0 +1,15 @@ +//RUN: %clang_cc1 %s -triple spir -verify -fsyntax-only + +#pragma OPENCL EXTENSION cl_khr_fp16 : disable + +typedef half half2 __attribute__((ext_vector_type(2))); + +half f(half2 h2) { // expected-error{{declaring function return value of type 'half' is not allowed ; did you forget * ?}} + return h2.s0; // expected-error{{loading directly from pointer to type '__private half' requires cl_khr_fp16. Use vector data load builtin functions instead}} +} + +#pragma OPENCL EXTENSION cl_khr_fp16 : enable + +half f(half2 h2) { + return h2.s0; +} Index: clang/lib/Sema/SemaExprCXX.cpp =================================================================== --- clang/lib/Sema/SemaExprCXX.cpp +++ clang/lib/Sema/SemaExprCXX.cpp @@ -4193,7 +4193,9 @@ case ICK_Lvalue_To_Rvalue: { assert(From->getObjectKind() != OK_ObjCProperty); ExprResult FromRes = DefaultLvalueConversion(From); - assert(!FromRes.isInvalid() && "Can't perform deduced conversion?!"); + if (FromRes.isInvalid()) + return ExprError(); + From = FromRes.get(); FromType = From->getType(); break;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits