forked from OSchip/llvm-project
[OpenCL] Added diagnostic for implicit declaration of function in OpenCL
Reviewers: Anastasia, cfe-commits Reviewed By: Anastasia Subscribers: bader, yaxunl Differential Revision: https://reviews.llvm.org/D31745 llvm-svn: 304193
This commit is contained in:
parent
d4096140e3
commit
f59d921622
|
@ -8317,6 +8317,8 @@ def err_opencl_scalar_type_rank_greater_than_vector_type : Error<
|
|||
"element. (%0 and %1)">;
|
||||
def err_bad_kernel_param_type : Error<
|
||||
"%0 cannot be used as the type of a kernel parameter">;
|
||||
def err_opencl_implicit_function_decl : Error<
|
||||
"implicit declaration of function %0 is invalid in OpenCL">;
|
||||
def err_record_with_pointers_kernel_param : Error<
|
||||
"%select{struct|union}0 kernel parameters may not contain pointers">;
|
||||
def note_within_field_of_type : Note<
|
||||
|
|
|
@ -12509,6 +12509,9 @@ NamedDecl *Sema::ImplicitlyDefineFunction(SourceLocation Loc,
|
|||
unsigned diag_id;
|
||||
if (II.getName().startswith("__builtin_"))
|
||||
diag_id = diag::warn_builtin_unknown;
|
||||
// OpenCL v2.0 s6.9.u - Implicit function declaration is not supported.
|
||||
else if (getLangOpts().OpenCL)
|
||||
diag_id = diag::err_opencl_implicit_function_decl;
|
||||
else if (getLangOpts().C99)
|
||||
diag_id = diag::ext_implicit_function_decl;
|
||||
else
|
||||
|
|
|
@ -4,13 +4,13 @@
|
|||
|
||||
kernel void dse_builtins() {
|
||||
int tmp;
|
||||
enqueue_kernel(tmp, tmp, tmp, ^(void) { // expected-warning{{implicit declaration of function 'enqueue_kernel' is invalid in C99}}
|
||||
enqueue_kernel(tmp, tmp, tmp, ^(void) { // expected-error{{implicit declaration of function 'enqueue_kernel' is invalid in OpenCL}}
|
||||
return;
|
||||
});
|
||||
unsigned size = get_kernel_work_group_size(^(void) { // expected-warning{{implicit declaration of function 'get_kernel_work_group_size' is invalid in C99}}
|
||||
unsigned size = get_kernel_work_group_size(^(void) { // expected-error{{implicit declaration of function 'get_kernel_work_group_size' is invalid in OpenCL}}
|
||||
return;
|
||||
});
|
||||
size = get_kernel_preferred_work_group_size_multiple(^(void) { // expected-warning{{implicit declaration of function 'get_kernel_preferred_work_group_size_multiple' is invalid in C99}}
|
||||
size = get_kernel_preferred_work_group_size_multiple(^(void) { // expected-error{{implicit declaration of function 'get_kernel_preferred_work_group_size_multiple' is invalid in OpenCL}}
|
||||
return;
|
||||
});
|
||||
}
|
||||
|
@ -18,27 +18,48 @@ kernel void dse_builtins() {
|
|||
void pipe_builtins() {
|
||||
int tmp;
|
||||
|
||||
read_pipe(tmp, tmp); // expected-warning{{implicit declaration of function 'read_pipe' is invalid in C99}}
|
||||
write_pipe(tmp, tmp); // expected-warning{{implicit declaration of function 'write_pipe' is invalid in C99}}
|
||||
foo(void); // expected-error{{implicit declaration of function 'foo' is invalid in OpenCL}}
|
||||
// expected-note@-1{{'foo' declared here}}
|
||||
// expected-error@-2{{expected expression}}
|
||||
boo(); // expected-error{{implicit declaration of function 'boo' is invalid in OpenCL}}
|
||||
// expected-note@-1{{did you mean 'foo'?}}
|
||||
|
||||
reserve_read_pipe(tmp, tmp); // expected-warning{{implicit declaration of function 'reserve_read_pipe' is invalid in C99}}
|
||||
reserve_write_pipe(tmp, tmp); // expected-warning{{implicit declaration of function 'reserve_write_pipe' is invalid in C99}}
|
||||
read_pipe(tmp, tmp); // expected-error{{implicit declaration of function 'read_pipe' is invalid in OpenCL}}
|
||||
write_pipe(tmp, tmp); // expected-error{{implicit declaration of function 'write_pipe' is invalid in OpenCL}}
|
||||
|
||||
work_group_reserve_read_pipe(tmp, tmp); // expected-warning{{implicit declaration of function 'work_group_reserve_read_pipe' is invalid in C99}}
|
||||
work_group_reserve_write_pipe(tmp, tmp); // expected-warning{{implicit declaration of function 'work_group_reserve_write_pipe' is invalid in C99}}
|
||||
reserve_read_pipe(tmp, tmp); // expected-error{{implicit declaration of function 'reserve_read_pipe' is invalid in OpenCL}}
|
||||
// expected-note@-1{{'reserve_read_pipe' declared here}}
|
||||
reserve_write_pipe(tmp, tmp); // expected-error{{implicit declaration of function 'reserve_write_pipe' is invalid in OpenCL}}
|
||||
// expected-note@-1{{did you mean 'reserve_read_pipe'?}}
|
||||
|
||||
sub_group_reserve_write_pipe(tmp, tmp); // expected-warning{{implicit declaration of function 'sub_group_reserve_write_pipe' is invalid in C99}}
|
||||
sub_group_reserve_read_pipe(tmp, tmp); // expected-warning{{implicit declaration of function 'sub_group_reserve_read_pipe' is invalid in C99}}
|
||||
work_group_reserve_read_pipe(tmp, tmp); // expected-error{{implicit declaration of function 'work_group_reserve_read_pipe' is invalid in OpenCL}}
|
||||
// expected-note@-1 2{{'work_group_reserve_read_pipe' declared here}}
|
||||
work_group_reserve_write_pipe(tmp, tmp); // expected-error{{implicit declaration of function 'work_group_reserve_write_pipe' is invalid in OpenCL}}
|
||||
// expected-note@-1{{did you mean 'work_group_reserve_read_pipe'?}}
|
||||
// expected-note@-2{{'work_group_reserve_write_pipe' declared here}}
|
||||
|
||||
commit_read_pipe(tmp, tmp); // expected-warning{{implicit declaration of function 'commit_read_pipe' is invalid in C99}}
|
||||
commit_write_pipe(tmp, tmp); // expected-warning{{implicit declaration of function 'commit_write_pipe' is invalid in C99}}
|
||||
sub_group_reserve_write_pipe(tmp, tmp); // expected-error{{implicit declaration of function 'sub_group_reserve_write_pipe' is invalid in OpenCL}}
|
||||
// expected-note@-1{{did you mean 'work_group_reserve_write_pipe'?}}
|
||||
sub_group_reserve_read_pipe(tmp, tmp); // expected-error{{implicit declaration of function 'sub_group_reserve_read_pipe' is invalid in OpenCL}}
|
||||
|
||||
work_group_commit_read_pipe(tmp, tmp); // expected-warning{{implicit declaration of function 'work_group_commit_read_pipe' is invalid in C99}}
|
||||
work_group_commit_write_pipe(tmp, tmp); // expected-warning{{implicit declaration of function 'work_group_commit_write_pipe' is invalid in C99}}
|
||||
commit_read_pipe(tmp, tmp); // expected-error{{implicit declaration of function 'commit_read_pipe' is invalid in OpenCL}}
|
||||
// expected-note@-1{{'commit_read_pipe' declared here}}
|
||||
commit_write_pipe(tmp, tmp); // expected-error{{implicit declaration of function 'commit_write_pipe' is invalid in OpenCL}}
|
||||
// expected-note@-1{{did you mean 'commit_read_pipe'?}}
|
||||
|
||||
sub_group_commit_write_pipe(tmp, tmp); // expected-warning{{implicit declaration of function 'sub_group_commit_write_pipe' is invalid in C99}}
|
||||
sub_group_commit_read_pipe(tmp, tmp); // expected-warning{{implicit declaration of function 'sub_group_commit_read_pipe' is invalid in C99}}
|
||||
work_group_commit_read_pipe(tmp, tmp); // expected-error{{implicit declaration of function 'work_group_commit_read_pipe' is invalid in OpenCL}}
|
||||
// expected-note@-1{{'work_group_commit_read_pipe' declared here}}
|
||||
// expected-note@-2{{did you mean 'work_group_reserve_read_pipe'?}}
|
||||
work_group_commit_write_pipe(tmp, tmp); // expected-error{{implicit declaration of function 'work_group_commit_write_pipe' is invalid in OpenCL}}
|
||||
// expected-note@-1{{'work_group_commit_write_pipe' declared here}}
|
||||
// expected-note@-2{{did you mean 'work_group_commit_read_pipe'?}}
|
||||
|
||||
get_pipe_num_packets(tmp); // expected-warning{{implicit declaration of function 'get_pipe_num_packets' is invalid in C99}}
|
||||
get_pipe_max_packets(tmp); // expected-warning{{implicit declaration of function 'get_pipe_max_packets' is invalid in C99}}
|
||||
sub_group_commit_write_pipe(tmp, tmp); // expected-error{{implicit declaration of function 'sub_group_commit_write_pipe' is invalid in OpenCL}}
|
||||
// expected-note@-1{{did you mean 'work_group_commit_write_pipe'?}}
|
||||
sub_group_commit_read_pipe(tmp, tmp); // expected-error{{implicit declaration of function 'sub_group_commit_read_pipe' is invalid in OpenCL}}
|
||||
|
||||
get_pipe_num_packets(tmp); // expected-error{{implicit declaration of function 'get_pipe_num_packets' is invalid in OpenCL}}
|
||||
// expected-note@-1{{'get_pipe_num_packets' declared here}}
|
||||
get_pipe_max_packets(tmp); // expected-error{{implicit declaration of function 'get_pipe_max_packets' is invalid in OpenCL}}
|
||||
// expected-note@-1{{did you mean 'get_pipe_num_packets'?}}
|
||||
}
|
||||
|
|
|
@ -10,7 +10,7 @@ void test(void) {
|
|||
|
||||
glob = to_global(glob, loc);
|
||||
#if __OPENCL_C_VERSION__ < CL_VERSION_2_0
|
||||
// expected-warning@-2{{implicit declaration of function 'to_global' is invalid in C99}}
|
||||
// expected-error@-2{{implicit declaration of function 'to_global' is invalid in OpenCL}}
|
||||
// expected-warning@-3{{incompatible integer to pointer conversion assigning to '__global int *' from 'int'}}
|
||||
#else
|
||||
// expected-error@-5{{invalid number of arguments to function: 'to_global'}}
|
||||
|
|
Loading…
Reference in New Issue