Skip to content

Commit

Permalink
[OpenCL] Allow function declaration with empty argument list.
Browse files Browse the repository at this point in the history
Summary:
does it make sense to enable K&R function declaration style for OpenCL?
clang throws following error message for the declaration w/o arguments:

```
int my_func();
error: function with no prototype cannot use the spir_function calling convention
```

Current way to fix this issue is to specify that parameter list is empty by using 'void':

```
int my_func(void);
```

Let me know what do you think about this patch.

Reviewers: Anastasia, yaxunl

Reviewed By: Anastasia

Subscribers: cfe-commits, echuraev

Differential Revision: https://reviews.llvm.org/D33681

llvm-svn: 306653
  • Loading branch information
bader committed Jun 29, 2017
1 parent 82090a7 commit 3d0c978
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 2 deletions.
2 changes: 1 addition & 1 deletion clang/lib/Sema/SemaType.cpp
Expand Up @@ -4355,7 +4355,7 @@ static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state,

FunctionType::ExtInfo EI(getCCForDeclaratorChunk(S, D, FTI, chunkIndex));

if (!FTI.NumParams && !FTI.isVariadic && !LangOpts.CPlusPlus) {
if (!FTI.NumParams && !FTI.isVariadic && !LangOpts.CPlusPlus && !LangOpts.OpenCL) {
// Simple void foo(), where the incoming T is the result type.
T = Context.getFunctionNoProtoType(T, EI);
} else {
Expand Down
9 changes: 9 additions & 0 deletions clang/test/SemaOpenCL/function-no-args.cl
@@ -0,0 +1,9 @@
// RUN: %clang_cc1 -verify -pedantic -fsyntax-only -cl-std=CL2.0 %s
// expected-no-diagnostics

global int gi;
int my_func();
int my_func() {
gi = 2;
return gi;
}
2 changes: 1 addition & 1 deletion clang/test/SemaOpenCL/invalid-pipes-cl2.0.cl
Expand Up @@ -3,7 +3,7 @@
global pipe int gp; // expected-error {{type '__global read_only pipe int' can only be used as a function parameter in OpenCL}}
global reserve_id_t rid; // expected-error {{the '__global reserve_id_t' type cannot be used to declare a program scope variable}}

extern pipe write_only int get_pipe(); // expected-error {{type '__global write_only pipe int ()' can only be used as a function parameter in OpenCL}}
extern pipe write_only int get_pipe(); // expected-error {{type '__global write_only pipe int (void)' can only be used as a function parameter in OpenCL}}

kernel void test_invalid_reserved_id(reserve_id_t ID) { // expected-error {{'reserve_id_t' cannot be used as the type of a kernel parameter}}
}
Expand Down

0 comments on commit 3d0c978

Please sign in to comment.