<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>