summaryrefslogtreecommitdiffstats
path: root/clang/Driver/clang.cpp
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2008-09-03 21:22:16 +0000
committerTed Kremenek <kremenek@apple.com>2008-09-03 21:22:16 +0000
commitb44763456c0b0ec2990a68663405088463746866 (patch)
treedd50c30f8cf44f5fb3a8a3d1bdf0532383d1e3af /clang/Driver/clang.cpp
parent6626a2c51c0cfbf9636fec2ae546b7251f372a4d (diff)
downloadbcm5719-llvm-b44763456c0b0ec2990a68663405088463746866.tar.gz
bcm5719-llvm-b44763456c0b0ec2990a68663405088463746866.zip
Following gcc's behavior, only enable trigraphs if '-trigraphs' or '-ansi' is
specified, or -std is set to a conforming mode. llvm-svn: 55738
Diffstat (limited to 'clang/Driver/clang.cpp')
-rw-r--r--clang/Driver/clang.cpp23
1 files changed, 19 insertions, 4 deletions
diff --git a/clang/Driver/clang.cpp b/clang/Driver/clang.cpp
index 8b24474681b..bcad4959b4f 100644
--- a/clang/Driver/clang.cpp
+++ b/clang/Driver/clang.cpp
@@ -307,7 +307,8 @@ static void InitializeLangOptions(LangOptions &Options, LangKind LK) {
enum LangStds {
lang_unspecified,
lang_c89, lang_c94, lang_c99,
- lang_gnu89, lang_gnu99,
+ lang_gnu_START,
+ lang_gnu89 = lang_gnu_START, lang_gnu99,
lang_cxx98, lang_gnucxx98,
lang_cxx0x, lang_gnucxx0x
};
@@ -386,13 +387,23 @@ static llvm::cl::opt<bool>
NeXTRuntime("fnext-runtime",
llvm::cl::desc("Generate output compatible with the NeXT runtime."));
+
+
+static llvm::cl::opt<bool>
+Trigraphs("trigraphs", llvm::cl::desc("Process trigraph sequences."));
+
+static llvm::cl::opt<bool>
+Ansi("ansi", llvm::cl::desc("Equivalent to specifying -std=c89."));
+
// FIXME: add:
-// -ansi
-// -trigraphs
// -fdollars-in-identifiers
// -fpascal-strings
static void InitializeLanguageStandard(LangOptions &Options, LangKind LK,
TargetInfo *Target) {
+
+ if (Ansi) // "The -ansi option is equivalent to -std=c89."
+ LangStd = lang_c89;
+
if (LangStd == lang_unspecified) {
// Based on the base language, pick one.
switch (LK) {
@@ -446,7 +457,11 @@ static void InitializeLanguageStandard(LangOptions &Options, LangKind LK,
Options.ImplicitInt = 1;
else
Options.ImplicitInt = 0;
- Options.Trigraphs = 1; // -trigraphs or -ansi
+
+ // Mimicing gcc's behavior, trigraphs are only enabled if -trigraphs or -ansi
+ // is specified, or -std is set to a conforming mode.
+ Options.Trigraphs = LangStd < lang_gnu_START || Trigraphs ? 1 : 0;
+
Options.DollarIdents = 1; // FIXME: Really a target property.
Options.PascalStrings = PascalStrings;
Options.Microsoft = MSExtensions;
OpenPOWER on IntegriCloud