]> granicus.if.org Git - clang/commitdiff
Add support of -x objc-cpp-output, -x objc++-cpp-output to the Driver.
authorNico Weber <nicolasweber@gmx.de>
Sat, 13 Aug 2011 23:13:37 +0000 (23:13 +0000)
committerNico Weber <nicolasweber@gmx.de>
Sat, 13 Aug 2011 23:13:37 +0000 (23:13 +0000)
Matches gcc, and is also required for using ccache with clang.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@137563 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Driver/Types.def
lib/Driver/Tools.cpp
lib/Driver/Types.cpp
test/Driver/objc++-cpp-output.mm [new file with mode: 0644]
test/Driver/objc-cpp-output.m [new file with mode: 0644]

index f09a1dcaf26f3401f4c4c7b2a1139090c02af707..0c6b3a8910ffbd4305fe57c11ddbd551a4e61ca0 100644 (file)
@@ -44,10 +44,12 @@ TYPE("c",                        C,            PP_C,            0,       "u")
 TYPE("cl",                       CL,           PP_C,            0,       "u")
 TYPE("cuda",                     CUDA,         PP_CXX,          0,       "u")
 TYPE("objective-c-cpp-output",   PP_ObjC,      INVALID,         "mi",    "u")
+TYPE("objc-cpp-output",          PP_ObjC_Alias, INVALID,        "mi",    "u")
 TYPE("objective-c",              ObjC,         PP_ObjC,         0,       "u")
 TYPE("c++-cpp-output",           PP_CXX,       INVALID,         "ii",    "u")
 TYPE("c++",                      CXX,          PP_CXX,          0,       "u")
 TYPE("objective-c++-cpp-output", PP_ObjCXX,    INVALID,         "mii",   "u")
+TYPE("objc++-cpp-output",        PP_ObjCXX_Alias, INVALID,      "mii",   "u")
 TYPE("objective-c++",            ObjCXX,       PP_ObjCXX,       0,       "u")
 
 // C family input files to precompile.
index 43c3fbd810bff989b421cb3b617887e57b626c68..59e024e7a3541567d1bafe29130b74a19c557a87 100644 (file)
@@ -2400,13 +2400,15 @@ const char *darwin::CC1::getCC1Name(types::ID Type) const {
   case types::TY_PP_C: case types::TY_PP_CHeader:
     return "cc1";
   case types::TY_ObjC: case types::TY_ObjCHeader:
-  case types::TY_PP_ObjC: case types::TY_PP_ObjCHeader:
+  case types::TY_PP_ObjC: case types::TY_PP_ObjC_Alias:
+  case types::TY_PP_ObjCHeader:
     return "cc1obj";
   case types::TY_CXX: case types::TY_CXXHeader:
   case types::TY_PP_CXX: case types::TY_PP_CXXHeader:
     return "cc1plus";
   case types::TY_ObjCXX: case types::TY_ObjCXXHeader:
-  case types::TY_PP_ObjCXX: case types::TY_PP_ObjCXXHeader:
+  case types::TY_PP_ObjCXX: case types::TY_PP_ObjCXX_Alias:
+  case types::TY_PP_ObjCXXHeader:
     return "cc1objplus";
   }
 }
index a6285ecd393cfc409e8a12c395230010cfaccdde..24730182bc986c48a6816e1faf183cada0b8902c 100644 (file)
@@ -79,9 +79,9 @@ bool types::isAcceptedByClang(ID Id) {
   case TY_C: case TY_PP_C:
   case TY_CL:
   case TY_CUDA:
-  case TY_ObjC: case TY_PP_ObjC:
+  case TY_ObjC: case TY_PP_ObjC: case TY_PP_ObjC_Alias:
   case TY_CXX: case TY_PP_CXX:
-  case TY_ObjCXX: case TY_PP_ObjCXX:
+  case TY_ObjCXX: case TY_PP_ObjCXX: case TY_PP_ObjCXX_Alias:
   case TY_CHeader: case TY_PP_CHeader:
   case TY_ObjCHeader: case TY_PP_ObjCHeader:
   case TY_CXXHeader: case TY_PP_CXXHeader:
@@ -110,10 +110,10 @@ bool types::isObjC(ID Id) {
   default:
     return false;
 
-  case TY_ObjC: case TY_PP_ObjC:
+  case TY_ObjC: case TY_PP_ObjC: case TY_PP_ObjC_Alias:
   case TY_ObjCXX: case TY_PP_ObjCXX:
   case TY_ObjCHeader: case TY_PP_ObjCHeader:
-  case TY_ObjCXXHeader: case TY_PP_ObjCXXHeader:
+  case TY_ObjCXXHeader: case TY_PP_ObjCXXHeader: case TY_PP_ObjCXX_Alias:
     return true;
   }
 }
diff --git a/test/Driver/objc++-cpp-output.mm b/test/Driver/objc++-cpp-output.mm
new file mode 100644 (file)
index 0000000..bb88144
--- /dev/null
@@ -0,0 +1,8 @@
+// RUN: %clang -x objc++-cpp-output -c %s -o /dev/null
+
+// Should compile without errors
+@protocol P
+- (void)m;
+@end
+void f() {}
+class C {};
diff --git a/test/Driver/objc-cpp-output.m b/test/Driver/objc-cpp-output.m
new file mode 100644 (file)
index 0000000..6d97483
--- /dev/null
@@ -0,0 +1,7 @@
+// RUN: %clang -x objc-cpp-output -c %s -o /dev/null
+
+// Should compile without errors
+@protocol P
+- (void)m;
+@end
+void f() {}