diff options
author | Peter Collingbourne <peter@pcc.me.uk> | 2011-02-15 19:46:23 +0000 |
---|---|---|
committer | Peter Collingbourne <peter@pcc.me.uk> | 2011-02-15 19:46:23 +0000 |
commit | 39d3e7a26c1969fcb76bceb4ee0a410c60ea5954 (patch) | |
tree | 08f17230eab458bd526e3472f2c3ae021980d302 | |
parent | 97d7ff0e514793cb305a1595914f3c91833b4d8f (diff) |
OpenCL: semantic analysis support for cl_khr_fp64 extension
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@125588 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/clang/Basic/DiagnosticSemaKinds.td | 2 | ||||
-rw-r--r-- | lib/Sema/SemaType.cpp | 5 | ||||
-rw-r--r-- | test/CMakeLists.txt | 1 | ||||
-rw-r--r-- | test/SemaOpenCL/extension-fp64.cl | 17 |
4 files changed, 25 insertions, 0 deletions
diff --git a/include/clang/Basic/DiagnosticSemaKinds.td b/include/clang/Basic/DiagnosticSemaKinds.td index 272ca6892a..81b66812cf 100644 --- a/include/clang/Basic/DiagnosticSemaKinds.td +++ b/include/clang/Basic/DiagnosticSemaKinds.td @@ -3635,6 +3635,8 @@ def ext_c99_array_usage : Extension< "use of C99-specific array features, accepted as an extension">; def err_c99_array_usage_cxx : Error< "C99-specific array features are not permitted in C++">; +def err_double_requires_fp64 : Error< + "use of type 'double' requires cl_khr_fp64 extension to be enabled">; def note_getter_unavailable : Note< "or because setter is declared here, but no getter method %0 is found">; diff --git a/lib/Sema/SemaType.cpp b/lib/Sema/SemaType.cpp index b6d28cbe71..e69f9dd176 100644 --- a/lib/Sema/SemaType.cpp +++ b/lib/Sema/SemaType.cpp @@ -671,6 +671,11 @@ static QualType ConvertDeclSpecToType(Sema &S, TypeProcessingState &state) { Result = Context.LongDoubleTy; else Result = Context.DoubleTy; + + if (S.getLangOptions().OpenCL && !S.getOpenCLOptions().cl_khr_fp64) { + S.Diag(DS.getTypeSpecTypeLoc(), diag::err_double_requires_fp64); + declarator.setInvalidType(true); + } break; case DeclSpec::TST_bool: Result = Context.BoolTy; break; // _Bool or bool case DeclSpec::TST_decimal32: // _Decimal32 diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index da9ca218cd..02b6c9b813 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -23,6 +23,7 @@ set(CLANG_TEST_DIRECTORIES "SemaCXX" "SemaObjC" "SemaObjCXX" + "SemaOpenCL" "SemaTemplate") set(LLVM_SOURCE_DIR "${LLVM_MAIN_SRC_DIR}") diff --git a/test/SemaOpenCL/extension-fp64.cl b/test/SemaOpenCL/extension-fp64.cl new file mode 100644 index 0000000000..eaf2509502 --- /dev/null +++ b/test/SemaOpenCL/extension-fp64.cl @@ -0,0 +1,17 @@ +// RUN: %clang_cc1 %s -verify -pedantic -fsyntax-only + +void f1(double da) { // expected-error {{requires cl_khr_fp64 extension}} + double d; // expected-error {{requires cl_khr_fp64 extension}} +} + +#pragma OPENCL EXTENSION cl_khr_fp64 : enable + +void f2(void) { + double d; +} + +#pragma OPENCL EXTENSION cl_khr_fp64 : disable + +void f3(void) { + double d; // expected-error {{requires cl_khr_fp64 extension}} +} |