From: Douglas Gregor Date: Tue, 15 Jan 2013 06:45:29 +0000 (+0000) Subject: Add -fopenmp -cc1 option and wire it up to define _OPENMP, from Alexey Bataev! X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=50a70cd11801fd9a700d06e447095249c34c261f;p=clang Add -fopenmp -cc1 option and wire it up to define _OPENMP, from Alexey Bataev! git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@172509 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/LangOptions.def b/include/clang/Basic/LangOptions.def index 8ef766ff63..b78c26118c 100644 --- a/include/clang/Basic/LangOptions.def +++ b/include/clang/Basic/LangOptions.def @@ -117,6 +117,7 @@ LANGOPT(ShortEnums , 1, 0, "short enum types") LANGOPT(OpenCL , 1, 0, "OpenCL") LANGOPT(OpenCLVersion , 32, 0, "OpenCL version") LANGOPT(CUDA , 1, 0, "CUDA") +LANGOPT(OpenMP , 1, 0, "OpenMP support") LANGOPT(AssumeSaneOperatorNew , 1, 1, "implicit __attribute__((malloc)) for C++'s new operators") BENIGN_LANGOPT(ElideConstructors , 1, 1, "C++ copy constructor elision") diff --git a/include/clang/Driver/Options.td b/include/clang/Driver/Options.td index 685911fbca..1b8084927f 100644 --- a/include/clang/Driver/Options.td +++ b/include/clang/Driver/Options.td @@ -610,7 +610,7 @@ def fno_objc_nonfragile_abi : Flag<["-"], "fno-objc-nonfragile-abi">, Group, Group; def fobjc : Flag<["-"], "fobjc">, Group; def fomit_frame_pointer : Flag<["-"], "fomit-frame-pointer">, Group; -def fopenmp : Flag<["-"], "fopenmp">, Group; +def fopenmp : Flag<["-"], "fopenmp">, Group, Flags<[CC1Option]>; def fno_optimize_sibling_calls : Flag<["-"], "fno-optimize-sibling-calls">, Group; def foptimize_sibling_calls : Flag<["-"], "foptimize-sibling-calls">, Group; def force__cpusubtype__ALL : Flag<["-"], "force_cpusubtype_ALL">; diff --git a/lib/Frontend/CompilerInvocation.cpp b/lib/Frontend/CompilerInvocation.cpp index 0f00c07ca9..20def5e480 100644 --- a/lib/Frontend/CompilerInvocation.cpp +++ b/lib/Frontend/CompilerInvocation.cpp @@ -1241,6 +1241,9 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK, Opts.ApplePragmaPack = Args.hasArg(OPT_fapple_pragma_pack); Opts.CurrentModule = Args.getLastArgValue(OPT_fmodule_name); + // Check if -fopenmp is specified. + Opts.OpenMP = Args.hasArg(OPT_fopenmp); + // Record whether the __DEPRECATED define was requested. Opts.Deprecated = Args.hasFlag(OPT_fdeprecated_macro, OPT_fno_deprecated_macro, diff --git a/lib/Frontend/InitPreprocessor.cpp b/lib/Frontend/InitPreprocessor.cpp index 886b212bc2..3646e27a49 100644 --- a/lib/Frontend/InitPreprocessor.cpp +++ b/lib/Frontend/InitPreprocessor.cpp @@ -641,6 +641,16 @@ static void InitializePredefinedMacros(const TargetInfo &TI, "__attribute__((objc_ownership(none)))"); } + // OpenMP definition + if (LangOpts.OpenMP) { + // OpenMP 2.2: + // In implementations that support a preprocessor, the _OPENMP + // macro name is defined to have the decimal value yyyymm where + // yyyy and mm are the year and the month designations of the + // version of the OpenMP API that the implementation support. + Builder.defineMacro("_OPENMP", "201107"); + } + // Get other target #defines. TI.getTargetDefines(LangOpts, Builder); } diff --git a/test/OpenMP/predefined_macro.c b/test/OpenMP/predefined_macro.c new file mode 100644 index 0000000000..e18c3d26d4 --- /dev/null +++ b/test/OpenMP/predefined_macro.c @@ -0,0 +1,17 @@ +// RUN: %clang_cc1 -fopenmp -verify -DFOPENMP -o - %s +// RUN: %clang_cc1 -verify -o - %s +// expected-no-diagnostics +#ifdef FOPENMP +// -fopenmp option is specified +#ifndef _OPENMP +#error "No _OPENMP macro is defined with -fopenmp option" +#elsif _OPENMP != 201107 +#error "_OPENMP has incorrect value" +#endif //_OPENMP +#else +// No -fopenmp option is specified +#ifdef _OPENMP +#error "_OPENMP macro is defined without -fopenmp option" +#endif // _OPENMP +#endif // FOPENMP +