This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[gcc-in-cxx]: patches from multi-target-4_4-branch


Quoting Ian Lance Taylor <iant@google.com>:
I'd be happy to see and approve your patches.  Several people have made
changes to the gcc-in-cxx branch.

Indeed, after extracting the gcc-in-cxx patches I found I had to filter about half of them out because of patches independently installed by other
maintainers.


Just send them to gcc-patches as
usual with [gcc-in-cxx] in the Subject.



I have extracted the gcc-in-cxx dpatches from
svn://gcc.gnu.org/svn/gcc/branches/multi-target-4_4-branch ; there is
another sets of patches in
svn://gcc.gnu.org/svn/gcc/branches/arc-milepost-branch/gcc, but they
are probably not independent of this set of patches, so I suggest we review
this batch here first.

I'm not sure what you consider appropriate testing for the gcc-in-cxx branch,
since some things just don't work yet.  Here is what I've done so far, please
specify if you want any other testing done.

Baseline for testing was: svn://gcc.gnu.org/svn/gcc/branches/gcc-in-cxx@147820

- can't build all-gcc for --target=sh-elf for baseline; can build for
  patches version
- can't bootstrap either version on x86_64-unknown-linux-gnu (gcc11).
- make all-gcc all-target-newlib all-target-libstdc++-v3 works for both,
  and check-gcc shows the same regressions for baseline and patched version.
  Summaries are as follows:

                === gcc Summary ===

# of expected passes            55944
# of unexpected failures        16
# of unexpected successes       3
# of expected failures          146
# of unresolved testcases       3
# of unsupported tests          1302

                === g++ Summary ===

# of expected passes            19624
# of unexpected failures        43
# of expected failures          136
# of unresolved testcases       1
# of unsupported tests          252

                === gfortran Summary ===

# of expected passes            6504
# of unexpected failures        10876
# of expected failures          11
# of unresolved testcases       9140
# of untested testcases         1728
# of unsupported tests          526
(I didn't build the fortran libraries)

                === objc Summary ===

# of expected passes            224
# of unexpected failures        352
# of unresolved testcases       63
# of unsupported tests          24
(nor the objc libraries)

                === libstdc++ Summary ===

# of expected passes            6106
# of unexpected failures        1
# of unexpected successes       1
# of expected failures          82
# of unsupported tests          333

Here is first the ChangeLog with a brief explanation for each item,
followed by the uncommented ChangeLog and the patch:

2009-05-23  J"orn Rennecke  <joern.rennecke@arc.com>
Not really written is a single day, just an amalgamated ChangeLog.

	* config/sh/t-sh (sh-c.o): Use $(CXX) for building.
Fixes link error; sh-c.c uses a backend function function which has c++
linkage.

	* config/arc/arc.c: #include "df.h".
C will forgive some missing declarations where C++ gives a hard error.
	(arc_address_cost): Use INTVAL to refer to the value of a CONST_INT.
That's a genuine programming error that the C++ typechecking has found.
I though before that this code can't work, but nobody I know uses this code
(ARCtangent-A4 is obsolete), so it was never an issue till the compiler
complained.

	* targhooks.c (default_builtin_vectorized_function): Make signature
	agree with prototype in targhooks.h.
	(default_builtin_vectorized_conversion): Likewise.
	(default_builtin_reciprocal): Likewise.
See below entry for targhooks.h .

	* expr.c (move_by_pieces, store_by_pieces): Append _d to struct tag.
	Changed all users.
There is a conflict with the function names which makes functionality in
gdb inaccessible.

	* config/sh/sh.c (sh_attribute_table): Use extern in forward
	declaration.
Common issue with declaring/defining const variables in C++.

	* config/arc/arc.c (arc_attribute_table): Use extern in forward
	declaration.
Likewise.
	(output_shift): Replace initializatin of n with assignment.
g++ gave an error about jumping past the variable initialization.  There
is no actual problem here because the variable is not live at the goto
destination.

	* config/sh/sh.md (attribute cpu): Add comment about connection to
	enum processor_type in sh.h.

	* reorg.c (insn_sets_resource_p): include_delayed_effects is now bool.
The change from passing on the value of include_delayed_effects to using it
to select two enum values that are 0 and 1, respectively, pessimizes the code.
Changing the type to bool does not only make the usage clearer, it also gives
the compiler a hint that a future optimization could use as aa hint to verify
that the incoming values are always either 0 or 1, and thus the value can
actually be passed on.

	* config/sh/predicates.md (trapping_target_operand): Rename and to
	and_expr.
This is necessary in order to build the sh port with g++, because 'and' is
unfortunately a keyword in C++ .

	* targhooks.h (default_builtin_vectorized_function): Make prototype
	agree with target.h:struct vectorize:builtin_vectorized_function.
	(default_builtin_vectorized_conversion): Likewise with respect to
	builtin_conversion.
	(default_builtin_reciprocal): Likewise wrt.
	struct gcc_target:builtin_reciprocal
I resolved this in favour of consistently using an integral type rather
than using an enum because even where an enum is not target-dependent,
it is not desirable to use it in struct gcc_target, since that would
make these enums required for pretty much all of the compiler.
	* config/m32r/m32r.h (INITIALIZE_TRAMPOLINE): Use LCT_NORMAL.
C++ doesn't like 0 as an enum type constant.
	* config/m32r/m32r.c (df.h): #include.
Again, C++ is less forgiving about missing declarations.
	(m32r_attribute_table): Mark forward declaration with extern.
That const declaration problem again.
	(pop): Use alloc_reg_note.
	(block_move_call): Use LCT_NORMAL.
See above.

	* haifa-sched.c (insn_cost): No longer HAIFA_INLINE.
This function is needed by other modules if scheduling is enabled, and if
this symbol is declared inline, it will end up with the wrong linkage.

2009-05-23  J"orn Rennecke  <joern.rennecke@arc.com>

	* config/sh/t-sh (sh-c.o): Use $(CXX) for building.

	* config/arc/arc.c: #include "df.h".
	(arc_address_cost): Use INTVAL to refer to the value of a CONST_INT.

	* targhooks.c (default_builtin_vectorized_function): Make signature
	agree with prototype in targhooks.h.
	(default_builtin_vectorized_conversion): Likewise.
	(default_builtin_reciprocal): Likewise.

	* expr.c (move_by_pieces, store_by_pieces): Append _d to struct tag.
	Changed all users.

	* config/sh/sh.c (sh_attribute_table): Use extern in forward
	declaration.

	* config/arc/arc.c (arc_attribute_table): Use extern in forward
	declaration.
	(output_shift): Replace initializatin of n with assignment.

	* config/sh/sh.md (attribute cpu): Add comment about connection to
	enum processor_type in sh.h.

	* reorg.c (insn_sets_resource_p): include_delayed_effects is now bool.

	* config/sh/predicates.md (trapping_target_operand): Rename and to
	and_expr.

	* targhooks.h (default_builtin_vectorized_function): Make prototype
	agree with target.h:struct vectorize:builtin_vectorized_function.
	(default_builtin_vectorized_conversion): Likewise with respect to
	builtin_conversion.
	(default_builtin_reciprocal): Likewise wrt.
	struct gcc_target:builtin_reciprocal
	* config/m32r/m32r.h (INITIALIZE_TRAMPOLINE): Use LCT_NORMAL.
	* config/m32r/m32r.c (df.h): #include.
	(m32r_attribute_table): Mark forward declaration with extern.
	(pop): Use alloc_reg_note.
	(block_move_call): Use LCT_NORMAL.

	* haifa-sched.c (insn_cost): No longer HAIFA_INLINE.

Index: gcc/targhooks.c
===================================================================
--- gcc/targhooks.c	(revision 147820)
+++ gcc/targhooks.c	(working copy)
@@ -398,7 +398,7 @@ default_invalid_within_doloop (const_rtx
 /* Mapping of builtin functions to vectorized variants.  */
 
 tree
-default_builtin_vectorized_function (enum built_in_function fn ATTRIBUTE_UNUSED,
+default_builtin_vectorized_function (unsigned /*enum built_in_function*/ fn ATTRIBUTE_UNUSED,
 				     tree type_out ATTRIBUTE_UNUSED,
 				     tree type_in ATTRIBUTE_UNUSED)
 {
@@ -408,7 +408,7 @@ default_builtin_vectorized_function (enu
 /* Vectorized conversion.  */
 
 tree
-default_builtin_vectorized_conversion (enum tree_code code ATTRIBUTE_UNUSED,
+default_builtin_vectorized_conversion (unsigned /*enum tree_code code*/ ATTRIBUTE_UNUSED,
 				       tree type ATTRIBUTE_UNUSED)
 {
   return NULL_TREE;
@@ -417,7 +417,7 @@ default_builtin_vectorized_conversion (e
 /* Reciprocal.  */
 
 tree
-default_builtin_reciprocal (enum built_in_function fn ATTRIBUTE_UNUSED,
+default_builtin_reciprocal (unsigned /*enum built_in_function*/ fn ATTRIBUTE_UNUSED,
 			    bool md_fn ATTRIBUTE_UNUSED,
 			    bool sqrt ATTRIBUTE_UNUSED)
 {
Index: gcc/targhooks.h
===================================================================
--- gcc/targhooks.h	(revision 147820)
+++ gcc/targhooks.h	(working copy)
@@ -67,11 +67,13 @@ extern bool default_fixed_point_supporte
 extern const char * default_invalid_within_doloop (const_rtx);
 
 extern tree default_builtin_vectorized_function
-  (enum built_in_function, tree, tree);
+  (unsigned /*enum built_in_function */, tree, tree);
 
-extern tree default_builtin_vectorized_conversion (enum tree_code, tree);
+//extern tree default_builtin_vectorized_conversion (enum tree_code, tree);
+extern tree default_builtin_vectorized_conversion (unsigned, tree);
 
-extern tree default_builtin_reciprocal (enum built_in_function, bool, bool);
+//extern tree default_builtin_reciprocal (enum built_in_function, bool, bool);
+extern tree default_builtin_reciprocal (unsigned, bool, bool);
 
 extern bool default_builtin_vector_alignment_reachable (const_tree, bool);
 
Index: gcc/reorg.c
===================================================================
--- gcc/reorg.c	(revision 147820)
+++ gcc/reorg.c	(working copy)
@@ -174,7 +174,7 @@ static int max_uid;
 static int stop_search_p (rtx, int);
 static int resource_conflicts_p (struct resources *, struct resources *);
 static int insn_references_resource_p (rtx, struct resources *, int);
-static int insn_sets_resource_p (rtx, struct resources *, int);
+static int insn_sets_resource_p (rtx, struct resources *, bool);
 static rtx find_end_label (void);
 static rtx emit_delay_sequence (rtx, rtx, int);
 static rtx add_to_delay_list (rtx, rtx);
@@ -313,7 +313,7 @@ insn_references_resource_p (rtx insn, st
 
 static int
 insn_sets_resource_p (rtx insn, struct resources *res,
-		      int include_delayed_effects)
+		      bool include_delayed_effects)
 {
   struct resources insn_sets;
 
Index: gcc/haifa-sched.c
===================================================================
--- gcc/haifa-sched.c	(revision 147820)
+++ gcc/haifa-sched.c	(working copy)
@@ -601,7 +601,7 @@ static rtx last_scheduled_insn;
 /* Compute cost of executing INSN.
    This is the number of cycles between instruction issue and
    instruction results.  */
-HAIFA_INLINE int
+int
 insn_cost (rtx insn)
 {
   int cost;
Index: gcc/expr.c
===================================================================
--- gcc/expr.c	(revision 147820)
+++ gcc/expr.c	(working copy)
@@ -91,7 +91,7 @@ int cse_not_expected;
 
 /* This structure is used by move_by_pieces to describe the move to
    be performed.  */
-struct move_by_pieces
+struct move_by_pieces_d
 {
   rtx to;
   rtx to_addr;
@@ -109,7 +109,7 @@ struct move_by_pieces
 /* This structure is used by store_by_pieces to describe the clear to
    be performed.  */
 
-struct store_by_pieces
+struct store_by_pieces_d
 {
   rtx to;
   rtx to_addr;
@@ -126,16 +126,16 @@ static unsigned HOST_WIDE_INT move_by_pi
 						     unsigned int,
 						     unsigned int);
 static void move_by_pieces_1 (rtx (*) (rtx, ...), enum machine_mode,
-			      struct move_by_pieces *);
+			      struct move_by_pieces_d *);
 static bool block_move_libcall_safe_for_call_parm (void);
 static bool emit_block_move_via_movmem (rtx, rtx, rtx, unsigned, unsigned, HOST_WIDE_INT);
 static tree emit_block_move_libcall_fn (int);
 static void emit_block_move_via_loop (rtx, rtx, rtx, unsigned);
 static rtx clear_by_pieces_1 (void *, HOST_WIDE_INT, enum machine_mode);
 static void clear_by_pieces (rtx, unsigned HOST_WIDE_INT, unsigned int);
-static void store_by_pieces_1 (struct store_by_pieces *, unsigned int);
+static void store_by_pieces_1 (struct store_by_pieces_d *, unsigned int);
 static void store_by_pieces_2 (rtx (*) (rtx, ...), enum machine_mode,
-			       struct store_by_pieces *);
+			       struct store_by_pieces_d *);
 static tree clear_storage_libcall_fn (int);
 static rtx compress_float_constant (rtx, rtx);
 static rtx get_subtarget (rtx);
@@ -876,7 +876,7 @@ rtx
 move_by_pieces (rtx to, rtx from, unsigned HOST_WIDE_INT len,
 		unsigned int align, int endp)
 {
-  struct move_by_pieces data;
+  struct move_by_pieces_d data;
   rtx to_addr, from_addr = XEXP (from, 0);
   unsigned int max_size = MOVE_MAX_PIECES + 1;
   enum machine_mode mode = VOIDmode, tmode;
@@ -1088,7 +1088,7 @@ move_by_pieces_ninsns (unsigned HOST_WID
 
 static void
 move_by_pieces_1 (rtx (*genfun) (rtx, ...), enum machine_mode mode,
-		  struct move_by_pieces *data)
+		  struct move_by_pieces_d *data)
 {
   unsigned int size = GET_MODE_SIZE (mode);
   rtx to1 = NULL_RTX, from1;
@@ -2382,7 +2382,7 @@ store_by_pieces (rtx to, unsigned HOST_W
 		 rtx (*constfun) (void *, HOST_WIDE_INT, enum machine_mode),
 		 void *constfundata, unsigned int align, bool memsetp, int endp)
 {
-  struct store_by_pieces data;
+  struct store_by_pieces_d data;
 
   if (len == 0)
     {
@@ -2434,7 +2434,7 @@ store_by_pieces (rtx to, unsigned HOST_W
 static void
 clear_by_pieces (rtx to, unsigned HOST_WIDE_INT len, unsigned int align)
 {
-  struct store_by_pieces data;
+  struct store_by_pieces_d data;
 
   if (len == 0)
     return;
@@ -2462,7 +2462,7 @@ clear_by_pieces_1 (void *data ATTRIBUTE_
    rtx with BLKmode).  ALIGN is maximum alignment we can assume.  */
 
 static void
-store_by_pieces_1 (struct store_by_pieces *data ATTRIBUTE_UNUSED,
+store_by_pieces_1 (struct store_by_pieces_d *data ATTRIBUTE_UNUSED,
 		   unsigned int align ATTRIBUTE_UNUSED)
 {
   rtx to_addr = XEXP (data->to, 0);
@@ -2560,7 +2560,7 @@ store_by_pieces_1 (struct store_by_piece
 
 static void
 store_by_pieces_2 (rtx (*genfun) (rtx, ...), enum machine_mode mode,
-		   struct store_by_pieces *data)
+		   struct store_by_pieces_d *data)
 {
   unsigned int size = GET_MODE_SIZE (mode);
   rtx to1, cst;
Index: gcc/config/m32r/m32r.c
===================================================================
--- gcc/config/m32r/m32r.c	(revision 147820)
+++ gcc/config/m32r/m32r.c	(working copy)
@@ -42,6 +42,7 @@
 #include "target.h"
 #include "target-def.h"
 #include "tm-constrs.h"
+#include "df.h"
 
 /* Array of valid operand punctuation characters.  */
 char m32r_punct_chars[256];
@@ -65,7 +66,7 @@ static bool  m32r_handle_option (size_t,
 static void  init_reg_tables (void);
 static void  block_move_call (rtx, rtx, rtx);
 static int   m32r_is_insn (rtx);
-const struct attribute_spec m32r_attribute_table[];
+extern const struct attribute_spec m32r_attribute_table[];
 static rtx   m32r_legitimize_address (rtx, rtx, enum machine_mode);
 static tree  m32r_handle_model_attribute (tree *, tree, tree, int, bool *);
 static void  m32r_output_function_prologue (FILE *, HOST_WIDE_INT);
@@ -1633,7 +1634,7 @@ pop (int regno)
   x = emit_insn (gen_movsi_pop (gen_rtx_REG (Pmode, regno),
 				stack_pointer_rtx));
   REG_NOTES (x)
-    = gen_rtx_EXPR_LIST (REG_INC, stack_pointer_rtx, 0);
+    = alloc_reg_note (REG_INC, stack_pointer_rtx, 0);
 }
 
 /* Expand the m32r epilogue as a series of insns.  */
@@ -2338,7 +2339,7 @@ block_move_call (rtx dest_reg, rtx src_r
       && GET_MODE (bytes_rtx) != Pmode)
     bytes_rtx = convert_to_mode (Pmode, bytes_rtx, 1);
 
-  emit_library_call (m32r_function_symbol ("memcpy"), 0,
+  emit_library_call (m32r_function_symbol ("memcpy"), LCT_NORMAL,
 		     VOIDmode, 3, dest_reg, Pmode, src_reg, Pmode,
 		     convert_to_mode (TYPE_MODE (sizetype), bytes_rtx,
 				      TYPE_UNSIGNED (sizetype)),
Index: gcc/config/m32r/m32r.h
===================================================================
--- gcc/config/m32r/m32r.h	(revision 147820)
+++ gcc/config/m32r/m32r.h	(working copy)
@@ -1034,7 +1034,7 @@ L2:     .word STATIC
 				     gen_int_mode (m32r_cache_flush_trap, SImode))); \
       else if (m32r_cache_flush_func && m32r_cache_flush_func[0])		\
 	emit_library_call (m32r_function_symbol (m32r_cache_flush_func),	\
-			   0, VOIDmode, 3, TRAMP, Pmode,			\
+			   LCT_NORMAL, VOIDmode, 3, TRAMP, Pmode,	\
 			   gen_int_mode (TRAMPOLINE_SIZE, SImode), SImode,	\
 			   GEN_INT (3), SImode);				\
     }										\
Index: gcc/config/sh/predicates.md
===================================================================
--- gcc/config/sh/predicates.md	(revision 147820)
+++ gcc/config/sh/predicates.md	(working copy)
@@ -22,7 +22,7 @@
 (define_predicate "trapping_target_operand"
   (match_code "if_then_else")
 {
-  rtx cond, mem, res, tar, and;
+  rtx cond, mem, res, tar, and_expr;
 
   if (GET_MODE (op) != PDImode)
     return 0;
@@ -49,12 +49,12 @@ (define_predicate "trapping_target_opera
     return 0;
   if (GET_CODE (cond) != EQ)
     return 0;
-  and = XEXP (cond, 0);
-  return (GET_CODE (and) == AND
-	  && rtx_equal_p (XEXP (and, 0), tar)
-	  && GET_CODE (XEXP (and, 1)) == CONST_INT
+  and_expr = XEXP (cond, 0);
+  return (GET_CODE (and_expr) == AND
+	  && rtx_equal_p (XEXP (and_expr, 0), tar)
+	  && GET_CODE (XEXP (and_expr, 1)) == CONST_INT
 	  && GET_CODE (XEXP (cond, 1)) == CONST_INT
-	  && INTVAL (XEXP (and, 1)) == 3
+	  && INTVAL (XEXP (and_expr, 1)) == 3
 	  && INTVAL (XEXP (cond, 1)) == 3);
 })
 
Index: gcc/config/sh/sh.c
===================================================================
--- gcc/config/sh/sh.c	(revision 147820)
+++ gcc/config/sh/sh.c	(working copy)
@@ -184,7 +184,7 @@ static void push_regs (HARD_REG_SET *, i
 static int calc_live_regs (HARD_REG_SET *);
 static HOST_WIDE_INT rounded_frame_size (int);
 static rtx mark_constant_pool_use (rtx);
-const struct attribute_spec sh_attribute_table[];
+extern const struct attribute_spec sh_attribute_table[];
 static tree sh_handle_interrupt_handler_attribute (tree *, tree, tree, int, bool *);
 static tree sh_handle_resbank_handler_attribute (tree *, tree,
 						 tree, int, bool *);
Index: gcc/config/sh/sh.h
===================================================================
--- gcc/config/sh/sh.h	(revision 147820)
+++ gcc/config/sh/sh.h	(working copy)
@@ -2956,6 +2956,19 @@ struct sh_args {
 extern struct rtx_def *sh_compare_op0;
 extern struct rtx_def *sh_compare_op1;
 
+/* The SH machine description uses "sh_cpu_attr" to find the cpu variant
+   that is being compiled for for use in attributes.  For target compilation
+   performance reasons, this should be a direct variable access.
+   The type of that variable would naturally be enum attr_cpu, alas, that
+   is not possible, because there is no target-controlled headerfile
+   that is guaranteed to be only included after insn-attr.h, hence we
+   can't declare such a variable to be visible inside insn-attrtab.c .
+   If statements expressions were allowed, we could solve this by having
+   an 'extern enum attr_cpu sh_cpu' declaration inside a statement expression
+   to be used inside the sh_attr_cpu definition.
+   But as we have to do without statement expressions, we have to use a
+   different type for the sh_cpu variable.  */
+
 /* Which processor to schedule for.  The elements of the enumeration must
    match exactly the cpu attribute in the sh.md file.  */
 
Index: gcc/config/sh/t-sh
===================================================================
--- gcc/config/sh/t-sh	(revision 147820)
+++ gcc/config/sh/t-sh	(working copy)
@@ -19,7 +19,7 @@
 
 sh-c.o: $(srcdir)/config/sh/sh-c.c \
   $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(TM_H) $(TM_P_H) coretypes.h
-	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(srcdir)/config/sh/sh-c.c
+	$(CXX) -c $(ALL_CXXFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(srcdir)/config/sh/sh-c.c
 
 LIB1ASMSRC = sh/lib1funcs.asm
 LIB1ASMFUNCS = _ashiftrt _ashiftrt_n _ashiftlt _lshiftrt _movmem \
Index: gcc/config/sh/sh.md
===================================================================
--- gcc/config/sh/sh.md	(revision 147820)
+++ gcc/config/sh/sh.md	(working copy)
@@ -181,6 +181,7 @@ (define_constants [
 
 ;; Target CPU.
 
+; keep this in sync with enum processor_type in sh.h
 (define_attr "cpu"
  "sh1,sh2,sh2e,sh2a,sh3,sh3e,sh4,sh4a,sh5"
   (const (symbol_ref "sh_cpu_attr")))
Index: gcc/config/arc/arc.c
===================================================================
--- gcc/config/arc/arc.c	(revision 147820)
+++ gcc/config/arc/arc.c	(working copy)
@@ -41,6 +41,7 @@ along with GCC; see the file COPYING3.  
 #include "tm_p.h"
 #include "target.h"
 #include "target-def.h"
+#include "df.h"
 
 /* Which cpu we're compiling for.  */
 int arc_cpu_type;
@@ -78,7 +79,7 @@ static bool arc_handle_option (size_t, c
 static void record_cc_ref (rtx);
 static void arc_init_reg_tables (void);
 static int get_arc_condition_code (rtx);
-const struct attribute_spec arc_attribute_table[];
+extern const struct attribute_spec arc_attribute_table[];
 static tree arc_handle_interrupt_attribute (tree *, tree, tree, int, bool *);
 static bool arc_assemble_integer (rtx, unsigned int, int);
 static void arc_output_function_prologue (FILE *, HOST_WIDE_INT);
@@ -897,7 +898,7 @@ arc_address_cost (rtx addr, bool speed A
 	switch (GET_CODE (plus1))
 	  {
 	  case CONST_INT :
-	    return SMALL_INT (plus1) ? 1 : 2;
+	    return SMALL_INT (INTVAL (plus1)) ? 1 : 2;
 	  case CONST :
 	  case SYMBOL_REF :
 	  case LABEL_REF :
@@ -1502,8 +1503,9 @@ output_shift (rtx *operands)
     }
   else
     {
-      int n = INTVAL (operands[2]);
+      int n;
 
+      n = INTVAL (operands[2]);
       /* If the count is negative, make it 0.  */
       if (n < 0)
 	n = 0;

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]