svn commit: r209113 - in projects/clangbsd/contrib/llvm/tools/clang:
include/clang/Analysis/Analyses include/clang/Basic
include/clang/Driver lib/Analysis lib/Driver lib/Frontend lib/Sema
Roman Divacky
rdivacky at FreeBSD.org
Sat Jun 12 20:08:02 UTC 2010
Author: rdivacky
Date: Sat Jun 12 20:08:01 2010
New Revision: 209113
URL: http://svn.freebsd.org/changeset/base/209113
Log:
Sync the format extensions with head.
Modified:
projects/clangbsd/contrib/llvm/tools/clang/include/clang/Analysis/Analyses/PrintfFormatString.h
projects/clangbsd/contrib/llvm/tools/clang/include/clang/Basic/LangOptions.h
projects/clangbsd/contrib/llvm/tools/clang/include/clang/Driver/CC1Options.td
projects/clangbsd/contrib/llvm/tools/clang/include/clang/Driver/Options.td
projects/clangbsd/contrib/llvm/tools/clang/lib/Analysis/PrintfFormatString.cpp
projects/clangbsd/contrib/llvm/tools/clang/lib/Driver/Tools.cpp
projects/clangbsd/contrib/llvm/tools/clang/lib/Frontend/CompilerInvocation.cpp
projects/clangbsd/contrib/llvm/tools/clang/lib/Sema/SemaChecking.cpp
Modified: projects/clangbsd/contrib/llvm/tools/clang/include/clang/Analysis/Analyses/PrintfFormatString.h
==============================================================================
--- projects/clangbsd/contrib/llvm/tools/clang/include/clang/Analysis/Analyses/PrintfFormatString.h Sat Jun 12 19:32:52 2010 (r209112)
+++ projects/clangbsd/contrib/llvm/tools/clang/include/clang/Analysis/Analyses/PrintfFormatString.h Sat Jun 12 20:08:01 2010 (r209113)
@@ -308,7 +308,7 @@ public:
};
bool ParseFormatString(FormatStringHandler &H,
- const char *beg, const char *end);
+ const char *beg, const char *end, bool FormatExtensions);
} // end printf namespace
} // end clang namespace
Modified: projects/clangbsd/contrib/llvm/tools/clang/include/clang/Basic/LangOptions.h
==============================================================================
--- projects/clangbsd/contrib/llvm/tools/clang/include/clang/Basic/LangOptions.h Sat Jun 12 19:32:52 2010 (r209112)
+++ projects/clangbsd/contrib/llvm/tools/clang/include/clang/Basic/LangOptions.h Sat Jun 12 20:08:01 2010 (r209113)
@@ -54,6 +54,7 @@ public:
unsigned NeXTRuntime : 1; // Use NeXT runtime.
unsigned Freestanding : 1; // Freestanding implementation
+ unsigned FormatExtensions : 1; // FreeBSD format extensions (-fformat-extensions)
unsigned NoBuiltin : 1; // Do not use builtin functions (-fno-builtin)
unsigned ThreadsafeStatics : 1; // Whether static initializers are protected
Modified: projects/clangbsd/contrib/llvm/tools/clang/include/clang/Driver/CC1Options.td
==============================================================================
--- projects/clangbsd/contrib/llvm/tools/clang/include/clang/Driver/CC1Options.td Sat Jun 12 19:32:52 2010 (r209112)
+++ projects/clangbsd/contrib/llvm/tools/clang/include/clang/Driver/CC1Options.td Sat Jun 12 20:08:01 2010 (r209113)
@@ -377,6 +377,8 @@ def fsjlj_exceptions : Flag<"-fsjlj-exce
HelpText<"Use SjLj style exceptions">;
def ffreestanding : Flag<"-ffreestanding">,
HelpText<"Assert that the compilation takes place in a freestanding environment">;
+def fformat_extensions : Flag<"-fformat-extensions">,
+ HelpText<"FreeBSD printf format extensions">;
def fgnu_runtime : Flag<"-fgnu-runtime">,
HelpText<"Generate output compatible with the standard GNU Objective-C runtime">;
def std_EQ : Joined<"-std=">,
Modified: projects/clangbsd/contrib/llvm/tools/clang/include/clang/Driver/Options.td
==============================================================================
--- projects/clangbsd/contrib/llvm/tools/clang/include/clang/Driver/Options.td Sat Jun 12 19:32:52 2010 (r209112)
+++ projects/clangbsd/contrib/llvm/tools/clang/include/clang/Driver/Options.td Sat Jun 12 20:08:01 2010 (r209113)
@@ -268,6 +268,7 @@ def fexceptions : Flag<"-fexceptions">,
def fextdirs_EQ : Joined<"-fextdirs=">, Group<f_Group>;
def fhosted : Flag<"-fhosted">, Group<f_Group>;
def ffreestanding : Flag<"-ffreestanding">, Group<f_Group>;
+def fformat_extensions: Flag<"-fformat-extensions">;
def fgnu_keywords : Flag<"-fgnu-keywords">, Group<f_Group>;
def fgnu_runtime : Flag<"-fgnu-runtime">, Group<f_Group>;
def fheinous_gnu_extensions : Flag<"-fheinous-gnu-extensions">;
Modified: projects/clangbsd/contrib/llvm/tools/clang/lib/Analysis/PrintfFormatString.cpp
==============================================================================
--- projects/clangbsd/contrib/llvm/tools/clang/lib/Analysis/PrintfFormatString.cpp Sat Jun 12 19:32:52 2010 (r209112)
+++ projects/clangbsd/contrib/llvm/tools/clang/lib/Analysis/PrintfFormatString.cpp Sat Jun 12 20:08:01 2010 (r209113)
@@ -210,7 +210,8 @@ static bool ParseArgPosition(FormatStrin
static FormatSpecifierResult ParseFormatSpecifier(FormatStringHandler &H,
const char *&Beg,
const char *E,
- unsigned &argIndex) {
+ unsigned &argIndex,
+ bool FormatExtensions) {
using namespace clang::analyze_printf;
@@ -370,10 +371,10 @@ static FormatSpecifierResult ParseFormat
// Glibc specific.
case 'm': k = ConversionSpecifier::PrintErrno; break;
// FreeBSD format extensions
- case 'b': k = ConversionSpecifier::bArg; break; /* check for int and then char * */
- case 'r': k = ConversionSpecifier::xArg; break;
- case 'y': k = ConversionSpecifier::iArg; break;
- case 'D': k = ConversionSpecifier::DArg; break; /* check for u_char * pointer and a char * string */
+ case 'b': if (FormatExtensions) k = ConversionSpecifier::bArg; break; /* check for int and then char * */
+ case 'r': if (FormatExtensions) k = ConversionSpecifier::xArg; break;
+ case 'y': if (FormatExtensions) k = ConversionSpecifier::iArg; break;
+ case 'D': if (FormatExtensions) k = ConversionSpecifier::DArg; break; /* check for u_char * pointer and a char * string */
}
ConversionSpecifier CS(conversionPosition, k);
FS.setConversionSpecifier(CS);
@@ -391,13 +392,13 @@ static FormatSpecifierResult ParseFormat
}
bool clang::analyze_printf::ParseFormatString(FormatStringHandler &H,
- const char *I, const char *E) {
+ const char *I, const char *E, bool FormatExtensions) {
unsigned argIndex = 0;
// Keep looking for a format specifier until we have exhausted the string.
while (I != E) {
- const FormatSpecifierResult &FSR = ParseFormatSpecifier(H, I, E, argIndex);
+ const FormatSpecifierResult &FSR = ParseFormatSpecifier(H, I, E, argIndex, FormatExtensions);
// Did a fail-stop error of any kind occur when parsing the specifier?
// If so, don't do any more processing.
if (FSR.shouldStop())
Modified: projects/clangbsd/contrib/llvm/tools/clang/lib/Driver/Tools.cpp
==============================================================================
--- projects/clangbsd/contrib/llvm/tools/clang/lib/Driver/Tools.cpp Sat Jun 12 19:32:52 2010 (r209112)
+++ projects/clangbsd/contrib/llvm/tools/clang/lib/Driver/Tools.cpp Sat Jun 12 20:08:01 2010 (r209113)
@@ -1156,6 +1156,7 @@ void Clang::ConstructJob(Compilation &C,
Args.AddLastArg(CmdArgs, options::OPT_fcatch_undefined_behavior);
Args.AddLastArg(CmdArgs, options::OPT_femit_all_decls);
Args.AddLastArg(CmdArgs, options::OPT_fheinous_gnu_extensions);
+ Args.AddLastArg(CmdArgs, options::OPT_fformat_extensions);
// -flax-vector-conversions is default.
if (!Args.hasFlag(options::OPT_flax_vector_conversions,
Modified: projects/clangbsd/contrib/llvm/tools/clang/lib/Frontend/CompilerInvocation.cpp
==============================================================================
--- projects/clangbsd/contrib/llvm/tools/clang/lib/Frontend/CompilerInvocation.cpp Sat Jun 12 19:32:52 2010 (r209112)
+++ projects/clangbsd/contrib/llvm/tools/clang/lib/Frontend/CompilerInvocation.cpp Sat Jun 12 20:08:01 2010 (r209113)
@@ -530,6 +530,8 @@ static void LangOptsToArgs(const LangOpt
Res.push_back("-fgnu-runtime");
if (Opts.Freestanding)
Res.push_back("-ffreestanding");
+ if (Opts.FormatExtensions)
+ Res.push_back("-fformat-extensions");
if (Opts.NoBuiltin)
Res.push_back("-fno-builtin");
if (!Opts.AssumeSaneOperatorNew)
@@ -1245,6 +1247,7 @@ static void ParseLangArgs(LangOptions &O
Opts.CharIsSigned = !Args.hasArg(OPT_fno_signed_char);
Opts.ShortWChar = Args.hasArg(OPT_fshort_wchar);
Opts.Freestanding = Args.hasArg(OPT_ffreestanding);
+ Opts.FormatExtensions = Args.hasArg(OPT_fformat_extensions);
Opts.NoBuiltin = Args.hasArg(OPT_fno_builtin) || Opts.Freestanding;
Opts.AssumeSaneOperatorNew = !Args.hasArg(OPT_fno_assume_sane_operator_new);
Opts.HeinousExtensions = true;
Modified: projects/clangbsd/contrib/llvm/tools/clang/lib/Sema/SemaChecking.cpp
==============================================================================
--- projects/clangbsd/contrib/llvm/tools/clang/lib/Sema/SemaChecking.cpp Sat Jun 12 19:32:52 2010 (r209112)
+++ projects/clangbsd/contrib/llvm/tools/clang/lib/Sema/SemaChecking.cpp Sat Jun 12 20:08:01 2010 (r209113)
@@ -1433,7 +1433,8 @@ void Sema::CheckPrintfString(const Strin
isa<ObjCStringLiteral>(OrigFormatExpr), Str,
HasVAListArg, TheCall, format_idx);
- if (!analyze_printf::ParseFormatString(H, Str, Str + StrLen))
+ bool FormatExtensions = getLangOptions().FormatExtensions;
+ if (!analyze_printf::ParseFormatString(H, Str, Str + StrLen, FormatExtensions))
H.DoneProcessing();
}
More information about the svn-src-projects
mailing list