[PATCH] D33681: [OpenCL] Allow function declaration with empty argument list.
This revision was automatically updated to reflect the committed changes. Closed by commit rL315453: [OpenCL] Allow function declaration with empty argument list. (authored by bader). Changed prior to commit: https://reviews.llvm.org/D33681?vs=118437&id=118588#toc Repository: rL LLVM https://reviews.llvm.org/D33681 Files: cfe/trunk/lib/Parse/ParseDecl.cpp cfe/trunk/lib/Sema/SemaType.cpp cfe/trunk/test/SemaOpenCL/func.cl cfe/trunk/test/SemaOpenCL/invalid-pipes-cl2.0.cl Index: cfe/trunk/test/SemaOpenCL/func.cl === --- cfe/trunk/test/SemaOpenCL/func.cl +++ cfe/trunk/test/SemaOpenCL/func.cl @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 %s -verify -pedantic -fsyntax-only +// RUN: %clang_cc1 %s -verify -pedantic -fsyntax-only -triple spir-unknown-unknown // Variadic functions void vararg_f(int, ...);// expected-error {{invalid prototype, variadic arguments are not allowed in OpenCL}} @@ -16,6 +16,9 @@ //Function pointer void foo(void*); +// Expect no diagnostics for an empty parameter list. +void bar(); + void bar() { // declaring a function pointer is an error Index: cfe/trunk/test/SemaOpenCL/invalid-pipes-cl2.0.cl === --- cfe/trunk/test/SemaOpenCL/invalid-pipes-cl2.0.cl +++ cfe/trunk/test/SemaOpenCL/invalid-pipes-cl2.0.cl @@ -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}} } Index: cfe/trunk/lib/Sema/SemaType.cpp === --- cfe/trunk/lib/Sema/SemaType.cpp +++ cfe/trunk/lib/Sema/SemaType.cpp @@ -4460,7 +4460,8 @@ 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 { Index: cfe/trunk/lib/Parse/ParseDecl.cpp === --- cfe/trunk/lib/Parse/ParseDecl.cpp +++ cfe/trunk/lib/Parse/ParseDecl.cpp @@ -5989,7 +5989,8 @@ else if (RequiresArg) Diag(Tok, diag::err_argument_required_after_attribute); -HasProto = ParamInfo.size() || getLangOpts().CPlusPlus; +HasProto = ParamInfo.size() || getLangOpts().CPlusPlus +|| getLangOpts().OpenCL; // If we have the closing ')', eat it. Tracker.consumeClose(); Index: cfe/trunk/test/SemaOpenCL/func.cl === --- cfe/trunk/test/SemaOpenCL/func.cl +++ cfe/trunk/test/SemaOpenCL/func.cl @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 %s -verify -pedantic -fsyntax-only +// RUN: %clang_cc1 %s -verify -pedantic -fsyntax-only -triple spir-unknown-unknown // Variadic functions void vararg_f(int, ...);// expected-error {{invalid prototype, variadic arguments are not allowed in OpenCL}} @@ -16,6 +16,9 @@ //Function pointer void foo(void*); +// Expect no diagnostics for an empty parameter list. +void bar(); + void bar() { // declaring a function pointer is an error Index: cfe/trunk/test/SemaOpenCL/invalid-pipes-cl2.0.cl === --- cfe/trunk/test/SemaOpenCL/invalid-pipes-cl2.0.cl +++ cfe/trunk/test/SemaOpenCL/invalid-pipes-cl2.0.cl @@ -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 ty
[PATCH] D33681: [OpenCL] Allow function declaration with empty argument list.
bader updated this revision to Diff 118437. bader added a comment. Applied comments. https://reviews.llvm.org/D33681 Files: lib/Parse/ParseDecl.cpp lib/Sema/SemaType.cpp test/SemaOpenCL/func.cl test/SemaOpenCL/invalid-pipes-cl2.0.cl Index: test/SemaOpenCL/invalid-pipes-cl2.0.cl === --- test/SemaOpenCL/invalid-pipes-cl2.0.cl +++ test/SemaOpenCL/invalid-pipes-cl2.0.cl @@ -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}} } Index: test/SemaOpenCL/func.cl === --- test/SemaOpenCL/func.cl +++ test/SemaOpenCL/func.cl @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 %s -verify -pedantic -fsyntax-only +// RUN: %clang_cc1 %s -verify -pedantic -fsyntax-only -triple spir-unknown-unknown // Variadic functions void vararg_f(int, ...);// expected-error {{invalid prototype, variadic arguments are not allowed in OpenCL}} @@ -16,6 +16,9 @@ //Function pointer void foo(void*); +// Expect no diagnostics for an empty parameter list. +void bar(); + void bar() { // declaring a function pointer is an error Index: lib/Sema/SemaType.cpp === --- lib/Sema/SemaType.cpp +++ lib/Sema/SemaType.cpp @@ -4460,7 +4460,8 @@ 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 { Index: lib/Parse/ParseDecl.cpp === --- lib/Parse/ParseDecl.cpp +++ lib/Parse/ParseDecl.cpp @@ -5989,7 +5989,8 @@ else if (RequiresArg) Diag(Tok, diag::err_argument_required_after_attribute); -HasProto = ParamInfo.size() || getLangOpts().CPlusPlus; +HasProto = ParamInfo.size() || getLangOpts().CPlusPlus +|| getLangOpts().OpenCL; // If we have the closing ')', eat it. Tracker.consumeClose(); Index: test/SemaOpenCL/invalid-pipes-cl2.0.cl === --- test/SemaOpenCL/invalid-pipes-cl2.0.cl +++ test/SemaOpenCL/invalid-pipes-cl2.0.cl @@ -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}} } Index: test/SemaOpenCL/func.cl === --- test/SemaOpenCL/func.cl +++ test/SemaOpenCL/func.cl @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 %s -verify -pedantic -fsyntax-only +// RUN: %clang_cc1 %s -verify -pedantic -fsyntax-only -triple spir-unknown-unknown // Variadic functions void vararg_f(int, ...);// expected-error {{invalid prototype, variadic arguments are not allowed in OpenCL}} @@ -16,6 +16,9 @@ //Function pointer void foo(void*); +// Expect no diagnostics for an empty parameter list. +void bar(); + void bar() { // declaring a function pointer is an error Index: lib/Sema/SemaType.cpp === --- lib/Sema/SemaType.cpp +++ lib/Sema/SemaType.cpp @@ -4460,7 +4460,8 @@ FunctionType::ExtInfo EI(getCCForDeclaratorChunk(S, D, FTI, chunkIndex)); - if (!FTI.NumParams && !FTI.isVariadic && !LangOpts.CPlusPlus) { + if (!FTI.NumParams && !FTI.isVariadic && !LangOpts.CPlusPlus
[PATCH] D33681: [OpenCL] Allow function declaration with empty argument list.
yaxunl accepted this revision. yaxunl added a comment. LGTM. Thanks. https://reviews.llvm.org/D33681 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D33681: [OpenCL] Allow function declaration with empty argument list.
Anastasia accepted this revision. Anastasia added a comment. I would prefer to merge the new test with test/SemaOpenCL/func.cl, but otherwise LGTM! Thanks! https://reviews.llvm.org/D33681 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D33681: [OpenCL] Allow function declaration with empty argument list.
bader updated this revision to Diff 118210. bader edited the summary of this revision. bader added a comment. Fix parsing of function declarations with empty parameter list initializers. This change should fix the failure caught by the buildbot. Sorry for the long delay. https://reviews.llvm.org/D33681 Files: lib/Parse/ParseDecl.cpp lib/Sema/SemaType.cpp test/SemaOpenCL/function-no-args.cl test/SemaOpenCL/invalid-pipes-cl2.0.cl Index: test/SemaOpenCL/invalid-pipes-cl2.0.cl === --- test/SemaOpenCL/invalid-pipes-cl2.0.cl +++ test/SemaOpenCL/invalid-pipes-cl2.0.cl @@ -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}} } Index: test/SemaOpenCL/function-no-args.cl === --- test/SemaOpenCL/function-no-args.cl +++ 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; +} Index: lib/Sema/SemaType.cpp === --- lib/Sema/SemaType.cpp +++ lib/Sema/SemaType.cpp @@ -4460,7 +4460,8 @@ 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 { Index: lib/Parse/ParseDecl.cpp === --- lib/Parse/ParseDecl.cpp +++ lib/Parse/ParseDecl.cpp @@ -5989,7 +5989,8 @@ else if (RequiresArg) Diag(Tok, diag::err_argument_required_after_attribute); -HasProto = ParamInfo.size() || getLangOpts().CPlusPlus; +HasProto = ParamInfo.size() || getLangOpts().CPlusPlus +|| getLangOpts().OpenCL; // If we have the closing ')', eat it. Tracker.consumeClose(); Index: test/SemaOpenCL/invalid-pipes-cl2.0.cl === --- test/SemaOpenCL/invalid-pipes-cl2.0.cl +++ test/SemaOpenCL/invalid-pipes-cl2.0.cl @@ -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}} } Index: test/SemaOpenCL/function-no-args.cl === --- test/SemaOpenCL/function-no-args.cl +++ 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; +} Index: lib/Sema/SemaType.cpp === --- lib/Sema/SemaType.cpp +++ lib/Sema/SemaType.cpp @@ -4460,7 +4460,8 @@ 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 { Index: lib/Parse/ParseDecl.cpp === --- lib/Parse/ParseDecl.cpp +++ lib/Parse/
[PATCH] D33681: [OpenCL] Allow function declaration with empty argument list.
bader added a comment. @chapuni, thanks for taking care of this. I'll take a look. https://reviews.llvm.org/D33681 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D33681: [OpenCL] Allow function declaration with empty argument list.
chapuni reopened this revision. chapuni added a comment. This revision is now accepted and ready to land. Reverted in https://reviews.llvm.org/rL306660. See also; http://lab.llvm.org:8011/builders/clang-x86_64-debian-fast/builds/4926 https://reviews.llvm.org/D33681 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D33681: [OpenCL] Allow function declaration with empty argument list.
Anastasia added a comment. Sure, no problem! We might add some note on this feature to Clang manual. But we can do it later as well. Thanks! https://reviews.llvm.org/D33681 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D33681: [OpenCL] Allow function declaration with empty argument list.
bader added a comment. Ping. Although this patch is already accepted, I'd like to confirm that I can commit the latest update with changes in test/SemaOpenCL/invalid-pipes-cl2.0.cl. Thanks. https://reviews.llvm.org/D33681 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits