From 6db858eb45a6dbad971c08a4628e1a39de6ddbc2 Mon Sep 17 00:00:00 2001
From: kenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Sat, 15 Apr 2000 15:44:19 +0000
Subject: [PATCH] 	* varasm.c (assemble_variable): Add cast to remove
 warning. 	(immed_real_const_1): Only use CONST[01]_RTX if not in nested
 function.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@33165 138bc75d-0d04-0410-961f-82ee72b054a4
---
 gcc/ChangeLog |  5 ++++-
 gcc/varasm.c  | 17 +++++++++++------
 2 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 2c8a972fc155..673a8c9a7fe1 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,7 +1,10 @@
 Sat Apr 15 10:59:19 2000  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
 
+	* varasm.c (assemble_variable): Add cast to remove warning.
+	(immed_real_const_1): Only use CONST[01]_RTX if not in nested function.
+
 	* flow.c (count_basic_blocks, find_basic_blocks_1): Remove last change.
-	* optabs.c (emit_libcall_block): If have REG_EHG_REGION, update
+	* optabs.c (emit_libcall_block): If have REG_EH_REGION, update
 	region number to -1.
 
 2000-04-15  Richard Earnshaw (rearnsah@arm.com)
diff --git a/gcc/varasm.c b/gcc/varasm.c
index 442fca258921..5224284cb269 100644
--- a/gcc/varasm.c
+++ b/gcc/varasm.c
@@ -1507,7 +1507,7 @@ assemble_variable (decl, top_level, at_end, dont_output_data)
 		 * (BIGGEST_ALIGNMENT / BITS_PER_UNIT));
       
 #if !defined(ASM_OUTPUT_ALIGNED_COMMON) && !defined(ASM_OUTPUT_ALIGNED_BSS)
-      if (DECL_ALIGN (decl) / BITS_PER_UNIT > rounded)
+      if ((unsigned HOST_WIDE_INT) DECL_ALIGN (decl) / BITS_PER_UNIT > rounded)
          warning_with_decl 
            (decl, "requested alignment for %s is greater than implemented alignment of %d.",rounded);
 #endif
@@ -2162,15 +2162,19 @@ immed_real_const_1 (d, mode)
 
   u.d = d;
 
-  /* Detect special cases.  */
-
-  if (REAL_VALUES_IDENTICAL (dconst0, d))
+  /* Detect special cases.  But be careful we don't use a CONST_DOUBLE
+     that's from a parent function since it may be in its constant pool.  */
+  if (REAL_VALUES_IDENTICAL (dconst0, d)
+      && (cfun == 0 || decl_function_context (current_function_decl) == 0))
     return CONST0_RTX (mode);
+
   /* Check for NaN first, because some ports (specifically the i386) do not
      emit correct ieee-fp code by default, and thus will generate a core
      dump here if we pass a NaN to REAL_VALUES_EQUAL and if REAL_VALUES_EQUAL
      does a floating point comparison.  */
-  else if (! REAL_VALUE_ISNAN (d) && REAL_VALUES_EQUAL (dconst1, d))
+  else if ((! REAL_VALUE_ISNAN (d) && REAL_VALUES_EQUAL (dconst1, d))
+	   && (cfun == 0
+	       || decl_function_context (current_function_decl) == 0))
     return CONST1_RTX (mode);
 
   if (sizeof u == sizeof (HOST_WIDE_INT))
@@ -3677,7 +3681,8 @@ find_pool_constant (f, addr)
   struct pool_sym *sym;
   const char *label = XSTR (addr, 0);
 
-  for (sym = f->varasm->x_const_rtx_sym_hash_table[SYMHASH (label)]; sym; sym = sym->next)
+  for (sym = f->varasm->x_const_rtx_sym_hash_table[SYMHASH (label)]; sym;
+       sym = sym->next)
     if (sym->label == label)
       return sym->pool;
 
-- 
GitLab