From: Aaron Ballman Date: Thu, 29 May 2014 16:39:42 +0000 (+0000) Subject: No longer allow the -std options to entirely override the -x language option. This... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0d936db44e95b1b5b825ee3517a3fa3a9e2f5a3f;p=clang No longer allow the -std options to entirely override the -x language option. This allows -x cuda -std=c++11, for instance. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@209824 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Frontend/CompilerInvocation.cpp b/lib/Frontend/CompilerInvocation.cpp index 2ba9450c0f..1ed24a7e43 100644 --- a/lib/Frontend/CompilerInvocation.cpp +++ b/lib/Frontend/CompilerInvocation.cpp @@ -1114,18 +1114,13 @@ void CompilerInvocation::setLangDefaults(LangOptions &Opts, InputKind IK, Opts.ImplicitInt = Std.hasImplicitInt(); // Set OpenCL Version. - if (LangStd == LangStandard::lang_opencl) { - Opts.OpenCL = 1; + Opts.OpenCL = LangStd == LangStandard::lang_opencl || IK == IK_OpenCL; + if (LangStd == LangStandard::lang_opencl) Opts.OpenCLVersion = 100; - } - else if (LangStd == LangStandard::lang_opencl11) { - Opts.OpenCL = 1; + else if (LangStd == LangStandard::lang_opencl11) Opts.OpenCLVersion = 110; - } - else if (LangStd == LangStandard::lang_opencl12) { - Opts.OpenCL = 1; + else if (LangStd == LangStandard::lang_opencl12) Opts.OpenCLVersion = 120; - } // OpenCL has some additional defaults. if (Opts.OpenCL) { @@ -1136,8 +1131,7 @@ void CompilerInvocation::setLangDefaults(LangOptions &Opts, InputKind IK, Opts.NativeHalfType = 1; } - if (LangStd == LangStandard::lang_cuda) - Opts.CUDA = 1; + Opts.CUDA = LangStd == LangStandard::lang_cuda || IK == IK_CUDA; // OpenCL and C++ both have bool, true, false keywords. Opts.Bool = Opts.OpenCL || Opts.CPlusPlus; diff --git a/test/Frontend/stdlang.c b/test/Frontend/stdlang.c new file mode 100644 index 0000000000..71997f1403 --- /dev/null +++ b/test/Frontend/stdlang.c @@ -0,0 +1,9 @@ +// RUN: %clang_cc1 -x cuda -std=c++11 -DCUDA %s +// RUN: %clang_cc1 -x cl -std=c99 -DOPENCL %s +// expected-no-diagnostics + +#if defined(CUDA) + __attribute__((device)) void f_device(); +#elif defined(OPENCL) + kernel void func(void); +#endif diff --git a/test/Index/attributes-cuda.cu b/test/Index/attributes-cuda.cu index dd571f15a8..953ef3d51f 100644 --- a/test/Index/attributes-cuda.cu +++ b/test/Index/attributes-cuda.cu @@ -1,11 +1,10 @@ -// RUN: c-index-test -test-load-source all -x cuda -std=cuda %s | FileCheck %s +// RUN: c-index-test -test-load-source all -x cuda %s | FileCheck %s __attribute__((device)) void f_device(); __attribute__((global)) void f_global(); __attribute__((constant)) int* g_constant; __attribute__((host)) void f_host(); - // CHECK: attributes-cuda.cu:3:30: FunctionDecl=f_device:3:30 // CHECK-NEXT: attributes-cuda.cu:3:16: attribute(device) // CHECK: attributes-cuda.cu:4:30: FunctionDecl=f_global:4:30