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