[PATCH] Begin implementing Plan 9 C extensions.
Peter Collingbourne
peter at pcc.me.uk
Tue May 20 13:59:05 PDT 2014
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;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D3853.9640.patch
Type: text/x-patch
Size: 3552 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140520/5ecbda0b/attachment.bin>
More information about the cfe-commits
mailing list