aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2009-02-04 08:01:01 +0000
committerDaniel Dunbar <daniel@zuster.org>2009-02-04 08:01:01 +0000
commitfb5484990330377b3b919d8cd7afe0d60022e9e1 (patch)
tree10a3fc72eacd43e900d9246a38f9e1449f66f0a9
parent8b29a387788bbb7a7c3b64c37473bc46299d2132 (diff)
ccc: -ObjC and -ObjC++ change default language, but only for "source
files". git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@63727 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--tools/ccc/ccclib/Driver.py13
-rw-r--r--tools/ccc/test/ccc/ObjC.c7
2 files changed, 20 insertions, 0 deletions
diff --git a/tools/ccc/ccclib/Driver.py b/tools/ccc/ccclib/Driver.py
index 2f4cc14066..30e2ae702d 100644
--- a/tools/ccc/ccclib/Driver.py
+++ b/tools/ccc/ccclib/Driver.py
@@ -376,6 +376,19 @@ class Driver(object):
base,ext = os.path.splitext(inputValue)
if ext and ext in Types.kTypeSuffixMap:
klass = Types.kTypeSuffixMap[ext]
+
+ # -ObjC and -ObjC++ over-ride the default
+ # language, but only for "source files". We
+ # just treat everything that isn't a linker
+ # input as a source file.
+ #
+ # FIXME: Clean this up if we move the phase
+ # sequence into the type.
+ if klass is not Types.ObjectType:
+ if args.getLastArg(self.parser.ObjCOption):
+ klass = Types.ObjCType
+ elif args.getLastArg(self.parser.ObjCXXOption):
+ klass = Types.ObjCType
else:
# FIXME: Its not clear why we shouldn't just
# revert to unknown. I think this is more likely a
diff --git a/tools/ccc/test/ccc/ObjC.c b/tools/ccc/test/ccc/ObjC.c
new file mode 100644
index 0000000000..e638cbbc4e
--- /dev/null
+++ b/tools/ccc/test/ccc/ObjC.c
@@ -0,0 +1,7 @@
+// RUN: xcc -fsyntax-only %s -ObjC &&
+// RUN: ! xcc -fsyntax-only -x c %s -ObjC &&
+// RUN: xcc -fsyntax-only %s -ObjC++ &&
+// RUN: ! xcc -fsyntax-only -x c %s -ObjC++
+
+@interface A
+@end