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

Richard Smith richard at metafoo.co.uk
Fri May 22 10:34:00 PDT 2015


On 21 May 2015 6:20 pm, "Faisal Vali" <faisalv at gmail.com> wrote:
>
> 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?

Yes, that seems fine.

> 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/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150522/8cb40d84/attachment.html>


More information about the cfe-commits mailing list