<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Tue, May 20, 2014 at 2:25 PM, Alp Toker <span dir="ltr"><<a href="mailto:alp@nuanti.com" target="_blank">alp@nuanti.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi<br>
<br>
Is this <a href="http://plan9.bell-labs.com/sys/doc/compiler.html" target="_blank">http://plan9.bell-labs.com/<u></u>sys/doc/compiler.html</a> ?<br>
<br>
Looks like there's a fair bit of ground to cover to support this in clang.<br>
<br>
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.<br></blockquote><div>
<br></div><div>Structure displays are pretty much identical to C99's compound literals.<br></div><div>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.</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
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.<br>
<br>
Alp.<div><div class="h5"><br>
<br>
<br>
<br>
On 20/05/2014 23:59, Peter Collingbourne wrote:<br>
</div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5">
This makes a start on implementing a number of extensions provided by the Plan<br>
9 C compiler, from which Go's "cc" C compiler is derived. These extensions<br>
are required for building some parts of the Go standard library.<br>
<br>
This patch introduces the -fplan9-extensions flag and causes it to enable<br>
an extension which allows typedefs to be declared multiple times.<br>
<br>
<a href="http://reviews.llvm.org/D3853" target="_blank">http://reviews.llvm.org/D3853</a><br>
<br>
Files:<br>
   include/clang/Basic/<u></u>LangOptions.def<br>
   include/clang/Driver/Options.<u></u>td<br>
   lib/Driver/Tools.cpp<br>
   lib/Frontend/<u></u>CompilerInvocation.cpp<br>
   lib/Sema/SemaDecl.cpp<br>
   test/Sema/c11-typedef-redef.c<br>
<br>
Index: include/clang/Basic/<u></u>LangOptions.def<br>
==============================<u></u>==============================<u></u>=======<br>
--- include/clang/Basic/<u></u>LangOptions.def<br>
+++ include/clang/Basic/<u></u>LangOptions.def<br>
@@ -47,6 +47,7 @@<br>
  LANGOPT(MicrosoftExt      , 1, 0, "Microsoft C++ extensions")<br>
  LANGOPT(AsmBlocks         , 1, 0, "Microsoft inline asm blocks")<br>
  LANGOPT(Borland           , 1, 0, "Borland extensions")<br>
+LANGOPT(Plan9Ext          , 1, 0, "Plan 9 extensions")<br>
  LANGOPT(CPlusPlus         , 1, 0, "C++")<br>
  LANGOPT(CPlusPlus11       , 1, 0, "C++11")<br>
  LANGOPT(CPlusPlus1y       , 1, 0, "C++1y")<br>
Index: include/clang/Driver/Options.<u></u>td<br>
==============================<u></u>==============================<u></u>=======<br>
--- include/clang/Driver/Options.<u></u>td<br>
+++ include/clang/Driver/Options.<u></u>td<br>
@@ -775,6 +775,8 @@<br>
  def fno_pic : Flag<["-"], "fno-pic">, Group<f_Group>;<br>
  def fpie : Flag<["-"], "fpie">, Group<f_Group>;<br>
  def fno_pie : Flag<["-"], "fno-pie">, Group<f_Group>;<br>
+def fplan9_extensions : Flag<["-"], "fplan9-extensions">, Group<f_Group>, Flags<[CC1Option]>;<br>
+def fno_plan9_extensions : Flag<["-"], "fno-plan9-extensions">, Group<f_Group>;<br>
  def fprofile_arcs : Flag<["-"], "fprofile-arcs">, Group<f_Group>;<br>
  def fprofile_generate : Flag<["-"], "fprofile-generate">, Group<f_Group>;<br>
  def framework : Separate<["-"], "framework">, Flags<[LinkerInput]>;<br>
Index: lib/Driver/Tools.cpp<br>
==============================<u></u>==============================<u></u>=======<br>
--- lib/Driver/Tools.cpp<br>
+++ lib/Driver/Tools.cpp<br>
@@ -3678,6 +3678,11 @@<br>
                     options::OPT_fno_borland_<u></u>extensions, false))<br>
      CmdArgs.push_back("-fborland-<u></u>extensions");<br>
  +  // -fno-plan9-extensions is default.<br>
+  if (Args.hasFlag(options::OPT_<u></u>fplan9_extensions,<br>
+                   options::OPT_fno_plan9_<u></u>extensions, false))<br>
+    CmdArgs.push_back("-fplan9-<u></u>extensions");<br>
+<br>
    // -fno-delayed-template-parsing is default, except for Windows where MSVC STL<br>
    // needs it.<br>
    if (Args.hasFlag(options::OPT_<u></u>fdelayed_template_parsing,<br>
Index: lib/Frontend/<u></u>CompilerInvocation.cpp<br>
==============================<u></u>==============================<u></u>=======<br>
--- lib/Frontend/<u></u>CompilerInvocation.cpp<br>
+++ lib/Frontend/<u></u>CompilerInvocation.cpp<br>
@@ -1351,6 +1351,7 @@<br>
    Opts.MSCVersion = getLastArgIntValue(Args, OPT_fmsc_version, 0, Diags);<br>
    Opts.VtorDispMode = getLastArgIntValue(Args, OPT_vtordisp_mode_EQ, 1, Diags);<br>
    Opts.Borland = Args.hasArg(OPT_fborland_<u></u>extensions);<br>
+  Opts.Plan9Ext = Args.hasArg(OPT_fplan9_<u></u>extensions);<br>
    Opts.WritableStrings = Args.hasArg(OPT_fwritable_<u></u>strings);<br>
    Opts.ConstStrings = Args.hasFlag(OPT_fconst_<u></u>strings, OPT_fno_const_strings,<br>
                                     Opts.ConstStrings);<br>
Index: lib/Sema/SemaDecl.cpp<br>
==============================<u></u>==============================<u></u>=======<br>
--- lib/Sema/SemaDecl.cpp<br>
+++ lib/Sema/SemaDecl.cpp<br>
@@ -1769,8 +1769,8 @@<br>
      return New->setInvalidDecl();<br>
    }<br>
  -  // Modules always permit redefinition of typedefs, as does C11.<br>
-  if (getLangOpts().Modules || getLangOpts().C11)<br>
+  // Modules always permit redefinition of typedefs, as does C11 and Plan 9.<br>
+  if (getLangOpts().Modules || getLangOpts().C11 || getLangOpts().Plan9Ext)<br>
      return;<br>
        // If we have a redefinition of a typedef in C, emit a warning.  This warning<br>
Index: test/Sema/c11-typedef-redef.c<br>
==============================<u></u>==============================<u></u>=======<br>
--- test/Sema/c11-typedef-redef.c<br>
+++ test/Sema/c11-typedef-redef.c<br>
@@ -1,4 +1,5 @@<br>
  // RUN: %clang_cc1 -std=c11 %s -verify<br>
+// RUN: %clang_cc1 -fplan9-extensions %s -verify<br>
    typedef int type;<br>
  typedef type type;<br>
<br>
<br></div></div><div class="">
______________________________<u></u>_________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu" target="_blank">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/<u></u>mailman/listinfo/cfe-commits</a><br>
</div></blockquote><span class="HOEnZb"><font color="#888888">
<br>
-- <br>
<a href="http://www.nuanti.com" target="_blank">http://www.nuanti.com</a><br>
the browser experts</font></span><div class="HOEnZb"><div class="h5"><br>
<br>
______________________________<u></u>_________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu" target="_blank">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/<u></u>mailman/listinfo/cfe-commits</a><br>
</div></div></blockquote></div><br></div></div>