forked from OSchip/llvm-project
We allow implicit function declarations as an extension in all C dialects. Remove OpenCL special case.
llvm-svn: 314872
This commit is contained in:
parent
9bfa970a40
commit
289728d5a6
|
@ -355,7 +355,7 @@ def warn_implicit_function_decl : Warning<
|
||||||
"implicit declaration of function %0">,
|
"implicit declaration of function %0">,
|
||||||
InGroup<ImplicitFunctionDeclare>, DefaultIgnore;
|
InGroup<ImplicitFunctionDeclare>, DefaultIgnore;
|
||||||
def ext_implicit_function_decl : ExtWarn<
|
def ext_implicit_function_decl : ExtWarn<
|
||||||
"implicit declaration of function %0 is invalid in C99">,
|
"implicit declaration of function %0 is invalid in %select{C99|OpenCL}1">,
|
||||||
InGroup<ImplicitFunctionDeclare>;
|
InGroup<ImplicitFunctionDeclare>;
|
||||||
def note_function_suggestion : Note<"did you mean %0?">;
|
def note_function_suggestion : Note<"did you mean %0?">;
|
||||||
|
|
||||||
|
@ -8449,8 +8449,6 @@ def err_opencl_scalar_type_rank_greater_than_vector_type : Error<
|
||||||
"element. (%0 and %1)">;
|
"element. (%0 and %1)">;
|
||||||
def err_bad_kernel_param_type : Error<
|
def err_bad_kernel_param_type : Error<
|
||||||
"%0 cannot be used as the type of a kernel parameter">;
|
"%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<
|
def err_record_with_pointers_kernel_param : Error<
|
||||||
"%select{struct|union}0 kernel parameters may not contain pointers">;
|
"%select{struct|union}0 kernel parameters may not contain pointers">;
|
||||||
def note_within_field_of_type : Note<
|
def note_within_field_of_type : Note<
|
||||||
|
|
|
@ -12642,17 +12642,15 @@ NamedDecl *Sema::ImplicitlyDefineFunction(SourceLocation Loc,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Extension in C99. Legal in C90, but warn about it.
|
// Extension in C99. Legal in C90, but warn about it.
|
||||||
|
// OpenCL v2.0 s6.9.u - Implicit function declaration is not supported.
|
||||||
unsigned diag_id;
|
unsigned diag_id;
|
||||||
if (II.getName().startswith("__builtin_"))
|
if (II.getName().startswith("__builtin_"))
|
||||||
diag_id = diag::warn_builtin_unknown;
|
diag_id = diag::warn_builtin_unknown;
|
||||||
// OpenCL v2.0 s6.9.u - Implicit function declaration is not supported.
|
else if (getLangOpts().C99 || getLangOpts().OpenCL)
|
||||||
else if (getLangOpts().OpenCL)
|
|
||||||
diag_id = diag::err_opencl_implicit_function_decl;
|
|
||||||
else if (getLangOpts().C99)
|
|
||||||
diag_id = diag::ext_implicit_function_decl;
|
diag_id = diag::ext_implicit_function_decl;
|
||||||
else
|
else
|
||||||
diag_id = diag::warn_implicit_function_decl;
|
diag_id = diag::warn_implicit_function_decl;
|
||||||
Diag(Loc, diag_id) << &II;
|
Diag(Loc, diag_id) << &II << getLangOpts().OpenCL;
|
||||||
|
|
||||||
// If we found a prior declaration of this function, don't bother building
|
// If we found a prior declaration of this function, don't bother building
|
||||||
// another one. We've already pushed that one into scope, so there's nothing
|
// another one. We've already pushed that one into scope, so there's nothing
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// RUN: %clang_cc1 %s -fblocks -verify -pedantic -fsyntax-only -ferror-limit 100
|
// RUN: %clang_cc1 %s -fblocks -verify -pedantic-errors -fsyntax-only -ferror-limit 100
|
||||||
|
|
||||||
// Confirm CL2.0 Clang builtins are not available in earlier versions
|
// Confirm CL2.0 Clang builtins are not available in earlier versions
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ void test(void) {
|
||||||
|
|
||||||
glob = to_global(glob, loc);
|
glob = to_global(glob, loc);
|
||||||
#if __OPENCL_C_VERSION__ < CL_VERSION_2_0
|
#if __OPENCL_C_VERSION__ < CL_VERSION_2_0
|
||||||
// expected-error@-2{{implicit declaration of function 'to_global' is invalid in OpenCL}}
|
// expected-warning@-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'}}
|
// expected-warning@-3{{incompatible integer to pointer conversion assigning to '__global int *' from 'int'}}
|
||||||
#else
|
#else
|
||||||
// expected-error@-5{{invalid number of arguments to function: 'to_global'}}
|
// expected-error@-5{{invalid number of arguments to function: 'to_global'}}
|
||||||
|
|
Loading…
Reference in New Issue