]> granicus.if.org Git - clang/commitdiff
ccc: -x assembler-with-cpp was broken for darwin, and it wasn't using
authorDaniel Dunbar <daniel@zuster.org>
Wed, 11 Mar 2009 23:07:54 +0000 (23:07 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Wed, 11 Mar 2009 23:07:54 +0000 (23:07 +0000)
clang as the preprocessor even when it should.

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

tools/ccc/ccclib/ToolChain.py
tools/ccc/ccclib/Tools.py
tools/ccc/ccclib/Types.py
tools/ccc/test/ccc/darwin-x86-cc1.m

index 8c71789e1741fbc54fb8551f5a81ef1740a6e48f..d081f28d19aa32fa616fb0bf1a6bff3e1679371f 100644 (file)
@@ -57,14 +57,14 @@ class ToolChain(object):
 
     def shouldUseClangCompiler(self, action):
         # If user requested no clang, or this isn't a "compile" phase,
-        # or this isn't a C family option, then don't use clang.
+        # or this isn't an input clang understands, then don't use clang.
         if (self.driver.cccNoClang or 
             not isinstance(action.phase, (Phases.PreprocessPhase,
                                           Phases.CompilePhase,
                                           Phases.SyntaxOnlyPhase,
                                           Phases.EmitLLVMPhase,
                                           Phases.PrecompilePhase)) or
-            action.inputs[0].type not in Types.cTypesSet):
+            action.inputs[0].type not in Types.clangableTypesSet):
             return False
 
         if self.driver.cccNoClangPreprocessor:
index 53fe38df21b8d54842542c622752d56aab044915..f4b8683837e18d59df6a2121c225a047d956d1bd 100644 (file)
@@ -193,7 +193,13 @@ class Clang_CompileTool(Tool):
         elif outputType is Types.LLVMBCType:
             cmd_args.append('-emit-llvm-bc')
         elif outputType is Types.AsmTypeNoPP:
-            cmd_args.append('-S')
+            # FIXME: This is hackish, it would be better if we had the
+            # action instead of just looking at types.
+            assert len(inputs) == 1
+            if inputs[0].type is Types.AsmType:
+                cmd_args.append('-E')
+            else:
+                cmd_args.append('-S')
         elif (inputs[0].type.preprocess and 
               outputType is inputs[0].type.preprocess):
             cmd_args.append('-E')
@@ -453,7 +459,9 @@ class Darwin_X86_CC1Tool(Tool):
         """getCC1Name(type) -> name, use-cpp, is-cxx"""
         
         # FIXME: Get bool results from elsewhere.
-        if type is Types.CType or type is Types.CHeaderType:
+        if type is Types.AsmType:
+            return 'cc1',True,False
+        elif type is Types.CType or type is Types.CHeaderType:
             return 'cc1',True,False
         elif type is Types.CTypeNoPP or type is Types.CHeaderNoPPType:
             return 'cc1',False,False
index 94c00410da6e7850a253690997d3dd5185524d6d..77e7907faec210c02d4a656b5ae41577f54141ac 100644 (file)
@@ -148,14 +148,15 @@ kTypeSpecifierMap = {
 }
 
 # Set of C family types.
-cTypesSet = set([CType, CTypeNoPP, 
-                 ObjCType, ObjCTypeNoPP,
-                 CXXType, CXXTypeNoPP,
-                 ObjCXXType, ObjCXXTypeNoPP,
-                 CHeaderType, CHeaderNoPPType,
-                 ObjCHeaderType, ObjCHeaderNoPPType,
-                 CXXHeaderType, CXXHeaderNoPPType,
-                 ObjCXXHeaderType, ObjCXXHeaderNoPPType])
+clangableTypesSet = set([AsmType, # Assembler to preprocess
+                         CType, CTypeNoPP, 
+                         ObjCType, ObjCTypeNoPP,
+                         CXXType, CXXTypeNoPP,
+                         ObjCXXType, ObjCXXTypeNoPP,
+                         CHeaderType, CHeaderNoPPType,
+                         ObjCHeaderType, ObjCHeaderNoPPType,
+                         CXXHeaderType, CXXHeaderNoPPType,
+                         ObjCXXHeaderType, ObjCXXHeaderNoPPType])
 
 # Set of C++ family types.
 cxxTypesSet = set([CXXType, CXXTypeNoPP,
index d00f85554fe42729cffe97d44daf87470b20c8aa..c9102caf9b0bf3d2d39fb3a2b65672910a858978 100644 (file)
 // RUN: xcc -ccc-no-clang -ccc-host-bits 32 -ccc-host-machine i386 -ccc-host-system darwin -ccc-host-release 10.5.0 -### -x objective-c-header %s -o /tmp/x.gch &> %t.opts &&
 // RUN: grep ' "/usr/libexec/gcc/i686-apple-darwin10/4.2.1/cc1obj" "-quiet" "-D__DYNAMIC__" ".*darwin-x86-cc1.m" "-fPIC" "-quiet" "-dumpbase" "darwin-x86-cc1.m" "-mmacosx-version-min=10.6.5" "-mtune=core2" "-auxbase" ".*" "-o" "/dev/null" "--output-pch=" "/tmp/x.gch"' %t.opts &&
 
+// RUN: touch %t.s &&
+// RUN: xcc -ccc-no-clang -ccc-host-bits 32 -ccc-host-machine i386 -ccc-host-system darwin -ccc-host-release 10.5.0 -### -c -x assembler %t.s &> %t.opts &&
+// RUN: grep /cc1 %t.opts | count 0 &&
+// RUN: grep ' "/usr/libexec/gcc/i686-apple-darwin10/4.2.1/as" "-arch" "i386" "-force_cpusubtype_ALL" "-o" ".*darwin-x86-cc1.m.out.tmp.s"' %t.opts &&
+
+// RUN: xcc -ccc-no-clang -ccc-host-bits 32 -ccc-host-machine i386 -ccc-host-system darwin -ccc-host-release 10.5.0 -### -c -x assembler-with-cpp %t.s &> %t.opts &&
+// RUN: grep ' "/usr/libexec/gcc/i686-apple-darwin10/4.2.1/cc1" "-E" "-quiet" "-D__DYNAMIC__" ".*darwin-x86-cc1.m.out.tmp.s" "-o" ".*" "-fPIC" "-mmacosx-version-min=10.6.5" "-mtune=core2"' %t.opts &&
+// RUN: grep ' "/usr/libexec/gcc/i686-apple-darwin10/4.2.1/as" "-arch" "i386" "-force_cpusubtype_ALL" "-o" ".*"' %t.opts &&
+
 // RUN: true