[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