[PATCH] Add cc1 option -fconcepts-ts + feature test macro

Faisal Vali faisalv at gmail.com
Thu May 21 18:20:35 PDT 2015


Committed as r237982.

http://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20150518/129643.html

Richard - are you ok with us proceeding like this (for tiny innocuous
patches), until Hubert gets his access?

Thanks!

Faisal Vali



On Thu, May 21, 2015 at 8:06 AM, Hubert Tong
<hubert.reinterpretcast at gmail.com> wrote:
> Hi rsmith, faisalv, fraggamuffin, rcraik,
>
> This adds `-fconcepts-ts` as a `cc1` option for enabling the
> in-progress implementation of the Concepts TS. The recommended feature
> test macro `__cpp_experimental_concepts` is set to `1` (as opposed to
> `201501`) to indicate that the feature is enabled, but the
> implementation is incomplete.
>
> The link to the Concepts TS in `cxx_status` is updated to refer to the
> PDTS (N4377). Additional changes related to `__has_feature` and
> `__has_extension` are to follow in a later change.
>
> http://reviews.llvm.org/D9909
>
> Files:
>   include/clang/Basic/LangOptions.def
>   include/clang/Driver/CC1Options.td
>   lib/Frontend/CompilerInvocation.cpp
>   lib/Frontend/InitPreprocessor.cpp
>   test/Lexer/cxx-features.cpp
>   www/cxx_status.html
>
> Index: include/clang/Basic/LangOptions.def
> ===================================================================
> --- include/clang/Basic/LangOptions.def
> +++ include/clang/Basic/LangOptions.def
> @@ -167,6 +167,7 @@
>
>  LANGOPT(AssumeSaneOperatorNew , 1, 1, "implicit __attribute__((malloc)) for C++'s new operators")
>  LANGOPT(SizedDeallocation , 1, 0, "enable sized deallocation functions")
> +LANGOPT(ConceptsTS , 1, 0, "enable C++ Extensions for Concepts")
>  BENIGN_LANGOPT(ElideConstructors , 1, 1, "C++ copy constructor elision")
>  BENIGN_LANGOPT(DumpRecordLayouts , 1, 0, "dumping the layout of IRgen'd records")
>  BENIGN_LANGOPT(DumpRecordLayoutsSimple , 1, 0, "dumping the layout of IRgen'd records in a simple form")
> Index: include/clang/Driver/CC1Options.td
> ===================================================================
> --- include/clang/Driver/CC1Options.td
> +++ include/clang/Driver/CC1Options.td
> @@ -365,6 +365,8 @@
>    Flag<["-"], "fmodules-local-submodule-visibility">,
>    HelpText<"Enforce name visibility rules across submodules of the same "
>             "top-level module.">;
> +def fconcepts_ts : Flag<["-"], "fconcepts-ts">,
> +  HelpText<"Enable C++ Extensions for Concepts.">;
>
>  let Group = Action_Group in {
>
> Index: lib/Frontend/CompilerInvocation.cpp
> ===================================================================
> --- lib/Frontend/CompilerInvocation.cpp
> +++ lib/Frontend/CompilerInvocation.cpp
> @@ -1537,6 +1537,7 @@
>    Opts.NoMathBuiltin = Args.hasArg(OPT_fno_math_builtin);
>    Opts.AssumeSaneOperatorNew = !Args.hasArg(OPT_fno_assume_sane_operator_new);
>    Opts.SizedDeallocation = Args.hasArg(OPT_fsized_deallocation);
> +  Opts.ConceptsTS = Args.hasArg(OPT_fconcepts_ts);
>    Opts.HeinousExtensions = Args.hasArg(OPT_fheinous_gnu_extensions);
>    Opts.AccessControl = !Args.hasArg(OPT_fno_access_control);
>    Opts.ElideConstructors = !Args.hasArg(OPT_fno_elide_constructors);
> Index: lib/Frontend/InitPreprocessor.cpp
> ===================================================================
> --- lib/Frontend/InitPreprocessor.cpp
> +++ lib/Frontend/InitPreprocessor.cpp
> @@ -453,6 +453,8 @@
>    }
>    if (LangOpts.SizedDeallocation)
>      Builder.defineMacro("__cpp_sized_deallocation", "201309");
> +  if (LangOpts.ConceptsTS)
> +    Builder.defineMacro("__cpp_experimental_concepts", "1");
>  }
>
>  static void InitializePredefinedMacros(const TargetInfo &TI,
> Index: test/Lexer/cxx-features.cpp
> ===================================================================
> --- test/Lexer/cxx-features.cpp
> +++ test/Lexer/cxx-features.cpp
> @@ -1,6 +1,7 @@
>  // RUN: %clang_cc1 -std=c++98 -verify %s
>  // RUN: %clang_cc1 -std=c++11 -verify %s
>  // RUN: %clang_cc1 -std=c++1y -fsized-deallocation -verify %s
> +// RUN: %clang_cc1 -std=c++1y -fsized-deallocation -fconcepts-ts -DCONCEPTS_TS=1 -verify %s
>
>  // expected-no-diagnostics
>
> @@ -123,3 +124,7 @@
>  #if check(alias_templates, 0, 200704, 200704)
>  #error "wrong value for __cpp_alias_templates"
>  #endif
> +
> +#if check(experimental_concepts, 0, 0, CONCEPTS_TS)
> +#error "wrong value for __cpp_experimental_concepts"
> +#endif
> Index: www/cxx_status.html
> ===================================================================
> --- www/cxx_status.html
> +++ www/cxx_status.html
> @@ -631,7 +631,7 @@
>      </tr>
>      <tr>
>        <td>[DRAFT TS] Concepts</td>
> -      <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3929.pdf">N3929</a></td>
> +      <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4377.pdf">N4377</a></td>
>        <td class="none" align="center">No</td>
>      </tr>
>  </table>
>
> EMAIL PREFERENCES
>   http://reviews.llvm.org/settings/panel/emailpreferences/



More information about the cfe-commits mailing list