<div dir="ltr">Is there a list of extensions you want to support?<div><br>Could the go standard library not use plan9 extensions, if it's interested in being compiled with more than 1 compiler?</div></div><div class="gmail_extra">
<br><br><div class="gmail_quote">On Tue, May 20, 2014 at 1:59 PM, Peter Collingbourne <span dir="ltr"><<a href="mailto:peter@pcc.me.uk" target="_blank">peter@pcc.me.uk</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
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/LangOptions.def<br>
  include/clang/Driver/Options.td<br>
  lib/Driver/Tools.cpp<br>
  lib/Frontend/CompilerInvocation.cpp<br>
  lib/Sema/SemaDecl.cpp<br>
  test/Sema/c11-typedef-redef.c<br>
<br>
Index: include/clang/Basic/LangOptions.def<br>
===================================================================<br>
--- include/clang/Basic/LangOptions.def<br>
+++ include/clang/Basic/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.td<br>
===================================================================<br>
--- include/clang/Driver/Options.td<br>
+++ include/clang/Driver/Options.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>
===================================================================<br>
--- lib/Driver/Tools.cpp<br>
+++ lib/Driver/Tools.cpp<br>
@@ -3678,6 +3678,11 @@<br>
                    options::OPT_fno_borland_extensions, false))<br>
     CmdArgs.push_back("-fborland-extensions");<br>
<br>
+  // -fno-plan9-extensions is default.<br>
+  if (Args.hasFlag(options::OPT_fplan9_extensions,<br>
+                   options::OPT_fno_plan9_extensions, false))<br>
+    CmdArgs.push_back("-fplan9-extensions");<br>
+<br>
   // -fno-delayed-template-parsing is default, except for Windows where MSVC STL<br>
   // needs it.<br>
   if (Args.hasFlag(options::OPT_fdelayed_template_parsing,<br>
Index: lib/Frontend/CompilerInvocation.cpp<br>
===================================================================<br>
--- lib/Frontend/CompilerInvocation.cpp<br>
+++ lib/Frontend/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_extensions);<br>
+  Opts.Plan9Ext = Args.hasArg(OPT_fplan9_extensions);<br>
   Opts.WritableStrings = Args.hasArg(OPT_fwritable_strings);<br>
   Opts.ConstStrings = Args.hasFlag(OPT_fconst_strings, OPT_fno_const_strings,<br>
                                    Opts.ConstStrings);<br>
Index: lib/Sema/SemaDecl.cpp<br>
===================================================================<br>
--- lib/Sema/SemaDecl.cpp<br>
+++ lib/Sema/SemaDecl.cpp<br>
@@ -1769,8 +1769,8 @@<br>
     return New->setInvalidDecl();<br>
   }<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>
<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>
===================================================================<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>
<br>
 typedef int type;<br>
 typedef type type;<br>
<br>_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu">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/mailman/listinfo/cfe-commits</a><br>
<br></blockquote></div><br></div>