diff mbox

Go patch committed: fix gccgo -S

Message ID mcr39bejs8v.fsf@dhcp-172-18-216-180.mtv.corp.google.com
State New
Headers show

Commit Message

Ian Lance Taylor Jan. 17, 2012, 2:52 p.m. UTC
Using gccgo -S without -o did not work correctly because it generated
BASE.o rather than BASE.s.  This happened because the gccgo driver adds
an explicit -o option, but did not take -S into account.  A cleaner
approach here would be some gcc driver interface to set combine_inputs,
but this approach works fine for now.  Bootstrapped and ran Go testsuite
on x86_64-unknown-linux-gnu.  Committed to mainline.

Ian


2012-01-17  Ian Lance Taylor  <iant@google.com>

	* gospec.c (lang_specific_driver): If we see -S without -o, add -o
	BASE.s rather than -o BASE.o.
diff mbox

Patch

Index: gcc/go/gospec.c
===================================================================
--- gcc/go/gospec.c	(revision 183119)
+++ gcc/go/gospec.c	(working copy)
@@ -1,5 +1,5 @@ 
 /* gospec.c -- Specific flags and argument handling of the gcc Go front end.
-   Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
+   Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
 
 This file is part of GCC.
 
@@ -109,6 +109,9 @@  lang_specific_driver (struct cl_decoded_
   /* Whether the -o option was used.  */
   bool saw_opt_o = false;
 
+  /* Whether the -S option was used.  */
+  bool saw_opt_S = false;
+
   /* The first input file with an extension of .go.  */
   const char *first_go_file = NULL;  
 
@@ -163,7 +166,6 @@  lang_specific_driver (struct cl_decoded_
 	  break;
 
 	case OPT_c:
-	case OPT_S:
 	case OPT_E:
 	case OPT_M:
 	case OPT_MM:
@@ -173,6 +175,11 @@  lang_specific_driver (struct cl_decoded_
 	  library = -1;
 	  break;
 
+	case OPT_S:
+	  saw_opt_S = true;
+	  library = -1;
+	  break;
+
 	case OPT_o:
 	  saw_opt_o = true;
 	  break;
@@ -280,10 +287,13 @@  lang_specific_driver (struct cl_decoded_
       alen = baselen + 3;
       out = XNEWVEC (char, alen);
       memcpy (out, base, baselen);
-      /* The driver will convert .o to some other suffix if
-	 appropriate.  */
+      /* The driver will convert .o to some other suffix (e.g., .obj)
+	 if appropriate.  */
       out[baselen] = '.';
-      out[baselen + 1] = 'o';
+      if (saw_opt_S)
+	out[baselen + 1] = 's';
+      else
+	out[baselen + 1] = 'o';
       out[baselen + 2] = '\0';
       generate_option (OPT_o, out, 1, CL_DRIVER,
 		       &new_decoded_options[j]);