Skip to content

Commit

Permalink
[OpenCL] Fix ICE with invalid use of half
Browse files Browse the repository at this point in the history
Because half is limited to the `cl_khr_fp16` extension being enabled,
`DefaultLvalueConversion` can fail when it's not enabled.
The original assumption that it will never fail is therefore wrong now.

Fixes: PR47976

Reviewed By: Anastasia

Differential Revision: https://reviews.llvm.org/D103175
  • Loading branch information
OleStrohm committed Jun 1, 2021
1 parent fb11326 commit 94b0aec
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 1 deletion.
4 changes: 3 additions & 1 deletion clang/lib/Sema/SemaExprCXX.cpp
Expand Up @@ -4193,7 +4193,9 @@ Sema::PerformImplicitConversion(Expr *From, QualType ToType,
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;
Expand Down
15 changes: 15 additions & 0 deletions 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;
}

0 comments on commit 94b0aec

Please sign in to comment.