public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
From: Alexandre Petit-Bianco <apbianco@cygnus.com>
To: nobody@gcc.gnu.org
Cc: gcc-prs@gcc.gnu.org
Subject: Re: java/4230: gcj -C segfaults on static string continuation '+' in gcj 3.1 expermental.
Date: Wed, 05 Sep 2001 21:06:00 -0000	[thread overview]
Message-ID: <20010906040602.24573.qmail@sourceware.cygnus.com> (raw)

The following reply was made to PR java/4230; it has been noted by GNATS.

From: Alexandre Petit-Bianco <apbianco@cygnus.com>
To: Tony Knaus <awk@panic.spinnakernet.com>
Cc: gcc-gnats@gcc.gnu.org
Subject: Re: java/4230: gcj -C segfaults on static string continuation '+' in gcj 3.1 expermental.
Date: Wed, 5 Sep 2001 20:59:07 -0700 (PDT)

 Tony Knaus writes:
 > gcj 3.1 generates a segmentation fault while building the xerces
 > parser and generating byte code. The compiler does not seg fault
 > when compiling to object code or just generating dependencies.
 
 Hmm, sorry about that. It appeared recently.
 
 > public class StringCrash {
 >     static final String viramaString = 
 >     "f"
 >     +"o"
 >     +"o"
 >     +"b"
 >     +"a"
 >     +"r";
 > 
 >     public static void main(String[] args) {
 > 	System.out.println("viramaString= " + viramaString);
 >     }
 > };
 
 
 Thank you for the test case. After a several hours in build hell, I'm
 testing this patch.
 
 ./A
 
 2001-09-05 Alexandre Petit-Bianco  <apbianco@redhat.com>
 
 	* jcf-write.c (generate_classfile): Issue an error in case of
 	field/initial value mismatch.
 	* parse.y (analyze_clinit_body): Keep <clinit> if an array is
 	being initialized and we're generating bytecode.
 	(java_complete_lhs): In CASE_EXPR section: added comments,
 	set DECL_INITIAL properly when appropriate.
 
 Index: jcf-write.c
 ===================================================================
 RCS file: /cvs/gcc/gcc/gcc/java/jcf-write.c,v
 retrieving revision 1.87
 diff -u -p -r1.87 jcf-write.c
 --- jcf-write.c	2001/08/31 04:14:43	1.87
 +++ jcf-write.c	2001/09/06 03:51:55
 @@ -2899,8 +2899,8 @@ generate_classfile (clas, state)
  	{
  	  tree init = DECL_INITIAL (part);
  	  static tree ConstantValue_node = NULL_TREE;
 -	  // This conversion is a work-around for front-end bug.
 -	  init = convert (TREE_TYPE (part), init);
 +	  if (TREE_TYPE (part) != TREE_TYPE (init))
 +	    fatal_error ("field initializer type mismatch.");
  	  ptr = append_chunk (NULL, 8, state);
  	  if (ConstantValue_node == NULL_TREE)
  	    ConstantValue_node = get_identifier ("ConstantValue");
 Index: parse.y
 ===================================================================
 RCS file: /cvs/gcc/gcc/gcc/java/parse.y,v
 retrieving revision 1.307
 diff -u -p -r1.307 parse.y
 --- parse.y	2001/09/04 21:50:31	1.307
 +++ parse.y	2001/09/06 03:52:04
 @@ -7813,6 +7813,11 @@ analyze_clinit_body (bbody)
  	break;
  	
        case MODIFY_EXPR:
 +	/* If we're generating to class file and we're dealing with an
 +	   array initialization, we return 1 to keep <clinit> */
 +	if (TREE_CODE (TREE_OPERAND (bbody, 1)) == NEW_ARRAY_INIT
 +	    && flag_emit_class_files)
 +	  return 1;
  	/* Return 0 if the operand is constant, 1 otherwise.  */
  	return ! TREE_CONSTANT (TREE_OPERAND (bbody, 1));
  
 @@ -11898,16 +11903,31 @@ java_complete_lhs (node)
  	  
  	  value = fold_constant_for_init (nn, nn);
  
 +	  /* When we have a primitype type, or a string and we're not
 +             emitting a class file, we actually don't want to generate
 +             anything for the assignment. */
  	  if (value != NULL_TREE &&
  	      (JPRIMITIVE_TYPE_P (TREE_TYPE (value)) || 
  	       (TREE_TYPE (value) == string_ptr_type_node &&
  		! flag_emit_class_files)))
  	    {
 +	      /* Prepare node for patch_assignment */
  	      TREE_OPERAND (node, 1) = value;
 +	      /* Call patch assignment to verify the assignment */
  	      if (patch_assignment (node, wfl_op1, value) == error_mark_node)
  		return error_mark_node;
 +	      /* Set DECL_INITIAL properly (a conversion might have
 +                 been decided by patch_assignment) and return the
 +                 empty statement. */
  	      else
 -		return empty_stmt_node;
 +		{
 +		  tree patched = patch_string (TREE_OPERAND (node, 1));
 +		  if (patched)
 +		    DECL_INITIAL (nn) = patched;
 +		  else
 +		    DECL_INITIAL (nn) = TREE_OPERAND (node, 1);
 +		  return empty_stmt_node;
 +		}
  	    }
  	  if (! flag_emit_class_files)
  	    DECL_INITIAL (nn) = NULL_TREE;
 @@ -11999,7 +12019,18 @@ java_complete_lhs (node)
  		       || JSTRING_P (TREE_TYPE (node))))
  	    node = java_refold (node);
  	}
 -      
 +
 +      /* Seek to set DECL_INITIAL to a proper value, since it might have
 +	 undergone a conversion in patch_assignment. We do that only when
 +	 it's necessary to have DECL_INITIAL properly set. */
 +      nn = TREE_OPERAND (node, 0);
 +      if (TREE_CODE (nn) == VAR_DECL 
 +	  && DECL_INITIAL (nn) && CONSTANT_VALUE_P (DECL_INITIAL (nn))
 +	  && FIELD_STATIC (nn) && FIELD_FINAL (nn) 
 +	  && (JPRIMITIVE_TYPE_P (TREE_TYPE (nn))
 +	      || TREE_TYPE (nn) == string_ptr_type_node))
 +	DECL_INITIAL (nn) = TREE_OPERAND (node, 1);
 +
        CAN_COMPLETE_NORMALLY (node) = 1;
        return node;
  


             reply	other threads:[~2001-09-05 21:06 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-09-05 21:06 Alexandre Petit-Bianco [this message]
  -- strict thread matches above, loose matches on Subject: below --
2002-01-04 19:15 rodrigc
2001-09-06  0:35 apbianco
2001-09-04 15:36 Tony Knaus

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20010906040602.24573.qmail@sourceware.cygnus.com \
    --to=apbianco@cygnus.com \
    --cc=gcc-prs@gcc.gnu.org \
    --cc=nobody@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).