[PATCH] Begin implementing Plan 9 C extensions.

Nico Weber thakis at chromium.org
Tue May 20 14:21:34 PDT 2014


Is there a list of extensions you want to support?

Could the go standard library not use plan9 extensions, if it's interested
in being compiled with more than 1 compiler?


On Tue, May 20, 2014 at 1:59 PM, Peter Collingbourne <peter at pcc.me.uk>wrote:

> This makes a start on implementing a number of extensions provided by the
> Plan
> 9 C compiler, from which Go's "cc" C compiler is derived. These extensions
> are required for building some parts of the Go standard library.
>
> This patch introduces the -fplan9-extensions flag and causes it to enable
> an extension which allows typedefs to be declared multiple times.
>
> http://reviews.llvm.org/D3853
>
> Files:
>   include/clang/Basic/LangOptions.def
>   include/clang/Driver/Options.td
>   lib/Driver/Tools.cpp
>   lib/Frontend/CompilerInvocation.cpp
>   lib/Sema/SemaDecl.cpp
>   test/Sema/c11-typedef-redef.c
>
> Index: include/clang/Basic/LangOptions.def
> ===================================================================
> --- include/clang/Basic/LangOptions.def
> +++ include/clang/Basic/LangOptions.def
> @@ -47,6 +47,7 @@
>  LANGOPT(MicrosoftExt      , 1, 0, "Microsoft C++ extensions")
>  LANGOPT(AsmBlocks         , 1, 0, "Microsoft inline asm blocks")
>  LANGOPT(Borland           , 1, 0, "Borland extensions")
> +LANGOPT(Plan9Ext          , 1, 0, "Plan 9 extensions")
>  LANGOPT(CPlusPlus         , 1, 0, "C++")
>  LANGOPT(CPlusPlus11       , 1, 0, "C++11")
>  LANGOPT(CPlusPlus1y       , 1, 0, "C++1y")
> Index: include/clang/Driver/Options.td
> ===================================================================
> --- include/clang/Driver/Options.td
> +++ include/clang/Driver/Options.td
> @@ -775,6 +775,8 @@
>  def fno_pic : Flag<["-"], "fno-pic">, Group<f_Group>;
>  def fpie : Flag<["-"], "fpie">, Group<f_Group>;
>  def fno_pie : Flag<["-"], "fno-pie">, Group<f_Group>;
> +def fplan9_extensions : Flag<["-"], "fplan9-extensions">, Group<f_Group>,
> Flags<[CC1Option]>;
> +def fno_plan9_extensions : Flag<["-"], "fno-plan9-extensions">,
> Group<f_Group>;
>  def fprofile_arcs : Flag<["-"], "fprofile-arcs">, Group<f_Group>;
>  def fprofile_generate : Flag<["-"], "fprofile-generate">, Group<f_Group>;
>  def framework : Separate<["-"], "framework">, Flags<[LinkerInput]>;
> Index: lib/Driver/Tools.cpp
> ===================================================================
> --- lib/Driver/Tools.cpp
> +++ lib/Driver/Tools.cpp
> @@ -3678,6 +3678,11 @@
>                     options::OPT_fno_borland_extensions, false))
>      CmdArgs.push_back("-fborland-extensions");
>
> +  // -fno-plan9-extensions is default.
> +  if (Args.hasFlag(options::OPT_fplan9_extensions,
> +                   options::OPT_fno_plan9_extensions, false))
> +    CmdArgs.push_back("-fplan9-extensions");
> +
>    // -fno-delayed-template-parsing is default, except for Windows where
> MSVC STL
>    // needs it.
>    if (Args.hasFlag(options::OPT_fdelayed_template_parsing,
> Index: lib/Frontend/CompilerInvocation.cpp
> ===================================================================
> --- lib/Frontend/CompilerInvocation.cpp
> +++ lib/Frontend/CompilerInvocation.cpp
> @@ -1351,6 +1351,7 @@
>    Opts.MSCVersion = getLastArgIntValue(Args, OPT_fmsc_version, 0, Diags);
>    Opts.VtorDispMode = getLastArgIntValue(Args, OPT_vtordisp_mode_EQ, 1,
> Diags);
>    Opts.Borland = Args.hasArg(OPT_fborland_extensions);
> +  Opts.Plan9Ext = Args.hasArg(OPT_fplan9_extensions);
>    Opts.WritableStrings = Args.hasArg(OPT_fwritable_strings);
>    Opts.ConstStrings = Args.hasFlag(OPT_fconst_strings,
> OPT_fno_const_strings,
>                                     Opts.ConstStrings);
> Index: lib/Sema/SemaDecl.cpp
> ===================================================================
> --- lib/Sema/SemaDecl.cpp
> +++ lib/Sema/SemaDecl.cpp
> @@ -1769,8 +1769,8 @@
>      return New->setInvalidDecl();
>    }
>
> -  // Modules always permit redefinition of typedefs, as does C11.
> -  if (getLangOpts().Modules || getLangOpts().C11)
> +  // Modules always permit redefinition of typedefs, as does C11 and Plan
> 9.
> +  if (getLangOpts().Modules || getLangOpts().C11 ||
> getLangOpts().Plan9Ext)
>      return;
>
>    // If we have a redefinition of a typedef in C, emit a warning.  This
> warning
> Index: test/Sema/c11-typedef-redef.c
> ===================================================================
> --- test/Sema/c11-typedef-redef.c
> +++ test/Sema/c11-typedef-redef.c
> @@ -1,4 +1,5 @@
>  // RUN: %clang_cc1 -std=c11 %s -verify
> +// RUN: %clang_cc1 -fplan9-extensions %s -verify
>
>  typedef int type;
>  typedef type type;
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140520/02174505/attachment.html>


More information about the cfe-commits mailing list