[PATCH] Begin implementing Plan 9 C extensions.
Alp Toker
alp at nuanti.com
Tue May 20 14:46:49 PDT 2014
On 21/05/2014 00:37, David Majnemer wrote:
> On Tue, May 20, 2014 at 2:25 PM, Alp Toker <alp at nuanti.com
> <mailto:alp at nuanti.com>> wrote:
>
> Hi
>
> Is this http://plan9.bell-labs.com/sys/doc/compiler.html ?
>
> Looks like there's a fair bit of ground to cover to support this
> in clang.
>
> Some extensions like unnamed substructures could borrow from
> -fms-extensions but others like structure displays and
> initialization indexes would appear to require new parse rules and
> semantic analysis.
>
>
> Structure displays are pretty much identical to C99's compound literals.
> Initialization indexes aren't too far from C99 designated initializers
> at all. The only difference I can see is that initialization indexes
> don't have an equals token between the index and the initializer.
Yes, there are lots of similarities, but in each case it looks like
there's a more modern, standardised equivalent that we already support.
As for the patch, -Wno-typedef-redefinition should do the job equally
well, or enabling C11.
So I don't think we're interested in adding this to clang at this time,
given the complexity it'd introduce to parse rules that are already
tangly enough.
Alp.
>
> How many active projects out there are actually using this
> language mode? There doesn't appear to be much recent (< 24 years
> old) material on the language online.
>
> Alp.
>
>
>
>
> On 20/05/2014 23:59, Peter Collingbourne 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 <mailto:cfe-commits at cs.uiuc.edu>
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
>
> --
> http://www.nuanti.com
> the browser experts
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu <mailto:cfe-commits at cs.uiuc.edu>
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
>
--
http://www.nuanti.com
the browser experts
More information about the cfe-commits
mailing list