diff options
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/include/clang/Basic/DiagnosticSemaKinds.td | 4 | ||||
| -rw-r--r-- | clang/lib/Parse/ParseDecl.cpp | 11 | ||||
| -rw-r--r-- | clang/test/Parser/opencl-cl20.cl | 12 | ||||
| -rw-r--r-- | clang/test/Parser/opencl-storage-class.cl | 8 | ||||
| -rw-r--r-- | clang/test/SemaOpenCL/invalid-access-qualifier.cl | 2 | ||||
| -rw-r--r-- | clang/test/SemaOpenCL/storageclass.cl | 2 |
6 files changed, 22 insertions, 17 deletions
diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td b/clang/include/clang/Basic/DiagnosticSemaKinds.td index 3a849b556f3..ba6db97c136 100644 --- a/clang/include/clang/Basic/DiagnosticSemaKinds.td +++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td @@ -7865,13 +7865,13 @@ def err_opencl_builtin_pipe_invalid_access_modifier : Error< def err_opencl_invalid_access_qualifier : Error< "access qualifier can only be used for pipe and image type">; def err_opencl_invalid_read_write : Error< - "access qualifier %0 can not be used for %1 %select{|earlier than OpenCL2.0 version}2">; + "access qualifier %0 can not be used for %1 %select{|earlier than OpenCL version 2.0}2">; def err_opencl_multiple_access_qualifiers : Error< "multiple access qualifiers">; // OpenCL Section 6.8.g def err_opencl_unknown_type_specifier : Error< - "OpenCL does not support the '%0' %select{type qualifier|storage class specifier}1">; + "OpenCL version %0 does not support the '%1' %select{type qualifier|storage class specifier}2">; // OpenCL v2.0 s6.12.5 Blocks restrictions def err_opencl_block_storage_type : Error< diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp index 1c93c08f718..91445281673 100644 --- a/clang/lib/Parse/ParseDecl.cpp +++ b/clang/lib/Parse/ParseDecl.cpp @@ -28,6 +28,7 @@ #include "llvm/ADT/SmallSet.h" #include "llvm/ADT/SmallString.h" #include "llvm/ADT/StringSwitch.h" +#include "llvm/Support/ScopedPrinter.h" using namespace clang; @@ -3514,9 +3515,13 @@ void Parser::ParseDeclarationSpecifiers(DeclSpec &DS, if (DiagID == diag::ext_duplicate_declspec) Diag(Tok, DiagID) << PrevSpec << FixItHint::CreateRemoval(Tok.getLocation()); - else if (DiagID == diag::err_opencl_unknown_type_specifier) - Diag(Tok, DiagID) << PrevSpec << isStorageClass; - else + else if (DiagID == diag::err_opencl_unknown_type_specifier) { + const int OpenCLVer = getLangOpts().OpenCLVersion; + std::string VerSpec = llvm::to_string(OpenCLVer / 100) + + std::string (".") + + llvm::to_string((OpenCLVer % 100) / 10); + Diag(Tok, DiagID) << VerSpec << PrevSpec << isStorageClass; + } else Diag(Tok, DiagID) << PrevSpec; } diff --git a/clang/test/Parser/opencl-cl20.cl b/clang/test/Parser/opencl-cl20.cl index b71869919ba..b14ad10153d 100644 --- a/clang/test/Parser/opencl-cl20.cl +++ b/clang/test/Parser/opencl-cl20.cl @@ -10,9 +10,9 @@ __generic int * __generic_test(__generic int *arg) { return var; } #ifndef CL20 -// expected-error@-5 {{OpenCL does not support the '__generic' type qualifier}} -// expected-error@-6 {{OpenCL does not support the '__generic' type qualifier}} -// expected-error@-6 {{OpenCL does not support the '__generic' type qualifier}} +// expected-error@-5 {{OpenCL version 1.0 does not support the '__generic' type qualifier}} +// expected-error@-6 {{OpenCL version 1.0 does not support the '__generic' type qualifier}} +// expected-error@-6 {{OpenCL version 1.0 does not support the '__generic' type qualifier}} #endif generic int * generic_test(generic int *arg) { @@ -20,7 +20,7 @@ generic int * generic_test(generic int *arg) { return var; } #ifndef CL20 -// expected-error@-5 {{OpenCL does not support the 'generic' type qualifier}} -// expected-error@-6 {{OpenCL does not support the 'generic' type qualifier}} -// expected-error@-6 {{OpenCL does not support the 'generic' type qualifier}} +// expected-error@-5 {{OpenCL version 1.0 does not support the 'generic' type qualifier}} +// expected-error@-6 {{OpenCL version 1.0 does not support the 'generic' type qualifier}} +// expected-error@-6 {{OpenCL version 1.0 does not support the 'generic' type qualifier}} #endif diff --git a/clang/test/Parser/opencl-storage-class.cl b/clang/test/Parser/opencl-storage-class.cl index 34cba693f04..6316ba7701d 100644 --- a/clang/test/Parser/opencl-storage-class.cl +++ b/clang/test/Parser/opencl-storage-class.cl @@ -2,10 +2,10 @@ void test_storage_class_specs() { - static int a; // expected-error {{OpenCL does not support the 'static' storage class specifier}} - register int b; // expected-error {{OpenCL does not support the 'register' storage class specifier}} - extern int c; // expected-error {{OpenCL does not support the 'extern' storage class specifier}} - auto int d; // expected-error {{OpenCL does not support the 'auto' storage class specifier}} + static int a; // expected-error {{OpenCL version 1.0 does not support the 'static' storage class specifier}} + register int b; // expected-error {{OpenCL version 1.0 does not support the 'register' storage class specifier}} + extern int c; // expected-error {{OpenCL version 1.0 does not support the 'extern' storage class specifier}} + auto int d; // expected-error {{OpenCL version 1.0 does not support the 'auto' storage class specifier}} #pragma OPENCL EXTENSION cl_clang_storage_class_specifiers : enable static int e; // expected-error {{static local variable must reside in constant address space}} diff --git a/clang/test/SemaOpenCL/invalid-access-qualifier.cl b/clang/test/SemaOpenCL/invalid-access-qualifier.cl index 8dc7002e1b4..1aeb996dde7 100644 --- a/clang/test/SemaOpenCL/invalid-access-qualifier.cl +++ b/clang/test/SemaOpenCL/invalid-access-qualifier.cl @@ -10,5 +10,5 @@ void test3(read_only read_only image1d_t i){} // expected-error{{multiple access #ifdef CL20 void test4(read_write pipe int i){} // expected-error{{access qualifier 'read_write' can not be used for 'pipe int'}} #else -void test4(__read_write image1d_t i) {} // expected-error{{access qualifier '__read_write' can not be used for '__read_write image1d_t' earlier than OpenCL2.0 version}} +void test4(__read_write image1d_t i) {} // expected-error{{access qualifier '__read_write' can not be used for '__read_write image1d_t' earlier than OpenCL version 2.0}} #endif diff --git a/clang/test/SemaOpenCL/storageclass.cl b/clang/test/SemaOpenCL/storageclass.cl index 1d940de2324..a93f8244dcb 100644 --- a/clang/test/SemaOpenCL/storageclass.cl +++ b/clang/test/SemaOpenCL/storageclass.cl @@ -13,7 +13,7 @@ void kernel foo() { constant int L1 = 0; local int L2; - auto int L3 = 7; // expected-error{{OpenCL does not support the 'auto' storage class specifier}} + auto int L3 = 7; // expected-error{{OpenCL version 1.2 does not support the 'auto' storage class specifier}} global int L4; // expected-error{{function scope variable cannot be declared in global address space}} } |

