public inbox for gcc-help@gcc.gnu.org
 help / color / mirror / Atom feed
From: "James Gregory" <james.jrg@gmail.com>
To: "Chris Jefferson" <chris@bubblescope.net>
Cc: gcc-help@gcc.gnu.org
Subject: Re: Including <iostream> affects whether or not program freezes?
Date: Sat, 12 Jul 2008 21:16:00 -0000	[thread overview]
Message-ID: <beb51c260807121338p6fc40a1dga8adbf5f68a82fc3@mail.gmail.com> (raw)
In-Reply-To: <5cc6b04e0807090949g30d5aacckc170e6068093e5a4@mail.gmail.com>

On Wed, Jul 9, 2008 at 5:49 PM, Chris Jefferson <chris@bubblescope.net> wrote:
> 2008/7/9 James Gregory <james.jrg@gmail.com>:

>> 4. Compile with gcc 4.2.3 (Ubuntu 64 bit), with optimization: my
>> program freezes in a particular function
>> 5. Compile with gcc 4.2.3 (Ubuntu 64 bit), with optimization, and
>> include <iostream> at the top of the file where the function which
>> freezes is defined: my program doesn't freeze

Chris Jefferson suggested I add the compiler flag "-fdump-tree-all". I
did this for the build which included iostream and the one which
didn't, produced a diff of the final code produced for the problematic
source file between each version, cropped it a bit, and came up with
the following. I don't understand assembler, but the header file
inclusion has clearly changed the code gcc produces. The obvious
differences are:

1. The existence of the line "-Invalid sum of incoming frequencies
873, should be 0" in the freezing version
2. The replacement of this in the version which freezes:

-  const unsigned char * this___l_iterthis__I___M_currentthis____.4618;
-  const unsigned char * this___l_iterthis__I___M_currentthis____.4617;
-  const unsigned char * this___l_iterthis__I___M_currentthis____.4616;

to this in the version which doesn't:

+  unsigned char temp.4650;
+  unsigned char temp.4649;
+  unsigned char temp.4648;

Can anyone tell me what is going on here?

--- AIInterpreter.cpp.102t.final_cleanup	2008-07-12 21:21:37.000000000 +0100
+++ ../nofreeze/AIInterpreter.cpp.102t.final_cleanup	2008-07-12
21:23:33.000000000 +0100

<snip>

 bool AIInterpreter::is_group_like_this(int, int, bool, bool) (this,
n_side, n_group, discount_dead, discount_our)
 {
-  int stat_value.4637;
-  const unsigned char * this___l_iterthis__I___M_currentthis____.4618;
-  const unsigned char * this___l_iterthis__I___M_currentthis____.4617;
-  const unsigned char * this___l_iterthis__I___M_currentthis____.4616;
+  int stat_value.4653;
+  unsigned char temp.4650;
+  unsigned char temp.4649;
+  unsigned char temp.4648;
   int give_group;
   int give_side;
-  struct Group_Base * D.100623;
-  bool D.100627;
+  struct Group_Base * D.100677;
+  bool D.100681;
   size_t __n;
-  struct Group_Base * D.100588;
-  const unsigned char * D.86283;
-  const unsigned char & D.86265;
-  unsigned char D.86266;
-  const unsigned char & D.86197;
-  unsigned char D.86198;
-  const unsigned char & D.86143;
-  unsigned char D.86144;
+  struct Group_Base * D.100642;
+  const unsigned char * D.86304;
+  const unsigned char & D.86286;
+  unsigned char D.86287;
+  const unsigned char * D.86270;
+  const unsigned char & D.86218;
+  unsigned char D.86219;
+  const unsigned char * D.86202;
+  const unsigned char & D.86164;
+  unsigned char D.86165;
+  const unsigned char * D.86148;
   size_t __n;
-  struct Side * D.86086;
+  struct Side * D.86107;
   int second_value;
   const unsigned char operator_type;
   int stat_value;
-  const unsigned char & D.68774;
-  unsigned char D.68755;
-  int D.68741;
+  const unsigned char & D.68792;
+  unsigned char D.68773;
+  int D.68759;

 <bb 2>:
-  D.100588 = operator-> (&((sides.D.66353._M_impl._M_start + (struct
Side *) ((long unsigned int) n_side *
256))->groups.D.33422._M_impl._M_start + (struct Group *) ((long
unsigned int) n_group * 16))->h_group);
-  if (D.100588->alive) goto <L1>; else goto <L0>;
+  D.100642 = operator-> (&((sides.D.66353._M_impl._M_start + (struct
Side *) ((long unsigned int) n_side *
256))->groups.D.33422._M_impl._M_start + (struct Group *) ((long
unsigned int) n_group * 16))->h_group);
+  if (D.100642->alive) goto <L1>; else goto <L0>;

 <L0>:;
   if (discount_dead) goto <L8>; else goto <L1>;
@@ -6385,72 +6402,70 @@
 <L1>:;
   __n = (long unsigned int) n_group;
   __n = (long unsigned int) n_side;
-  D.86086 = sides.D.66353._M_impl._M_start;
-  if ((*(((D.86086 + (struct Side *) ((long unsigned int)
this->my_side * 256))->scanned_groups.D.34444._M_impl._M_start +
(struct vector<bool,std::allocator<bool> > *) (__n *
40))->D.67000._M_impl._M_start.D.26400._M_p + (_Bit_type *) ((__n >>
6) * 8)) & 1 << (int) ((unsigned int) __n & 63)) == 0) goto <L8>; else
goto <L2>;
+  D.86107 = sides.D.66353._M_impl._M_start;
+  if ((*(((D.86107 + (struct Side *) ((long unsigned int)
this->my_side * 256))->scanned_groups.D.34444._M_impl._M_start +
(struct vector<bool,std::allocator<bool> > *) (__n *
40))->D.67000._M_impl._M_start.D.26400._M_p + (_Bit_type *) ((__n >>
6) * 8)) & 1 << (int) ((unsigned int) __n & 63)) == 0) goto <L8>; else
goto <L2>;

 <L2>:;
-  D.100623 = operator-> (&((D.86086 + (struct Side *) (__n *
256))->groups.D.33422._M_impl._M_start + (struct Group *) (__n *
16))->h_group);
-  D.100627 = OBJ_TYPE_REF(*(D.100623->_vptr.Group_Base +
152B);D.100623->19) (D.100623);
-  if (D.100627 != 0) goto <L8>; else goto <L3>;
+  D.100677 = operator-> (&((D.86107 + (struct Side *) (__n *
256))->groups.D.33422._M_impl._M_start + (struct Group *) (__n *
16))->h_group);
+  D.100681 = OBJ_TYPE_REF(*(D.100677->_vptr.Group_Base +
152B);D.100677->19) (D.100677);
+  if (D.100681 != 0) goto <L8>; else goto <L3>;

 <L3>:;
-  if (this->my_side != n_side) goto <L160>; else goto <L4>;
+  if (this->my_side != n_side) goto <L163>; else goto <L4>;

 <L4>:;
-  if (this->my_group != n_group) goto <L160>; else goto <L5>;
+  if (this->my_group != n_group) goto <L163>; else goto <L5>;

 <L5>:;
-  if (discount_our) goto <L8>; else goto <L160>;
+  if (discount_our) goto <L8>; else goto <L163>;

 <L8>:;
-  D.86143 = this->l_iter._M_current;
-  if (D.86143 == this->l_end._M_current) goto <L36>; else goto <L103>;
+  D.86164 = this->l_iter._M_current;
+  if (D.86164 == this->l_end._M_current) goto <L36>; else goto <L103>;

 <L103>:;
-  D.86144 = *D.86143;
-  if (D.86144 == 157) goto <L36>; else goto <L104>;
+  temp.4648 = *D.86164;
+  if (temp.4648 == 157) goto <L36>; else goto <L104>;

 <L104>:;
-  if (D.86144 == 158) goto <L36>; else goto <L120>;
+  if (temp.4648 == 158) goto <L36>; else goto <L166>;

-<L120>:;
-  this___l_iterthis__I___M_currentthis____.4616 = (const unsigned
char *) ((long unsigned int) D.86143 + 1);
+<L39>:;
+  D.86165 = *D.86148;
+  if (D.86165 == 157) goto <L36>; else goto <L40>;

-Invalid sum of incoming frequencies 873, should be 0
 <L40>:;
-  this___l_iterthis__I___M_currentthis____.4616 = (const unsigned
char *) ((long unsigned int)
this___l_iterthis__I___M_currentthis____.4616 + 1);
-  if (D.86144 == 157) goto <L162>; else goto <L40>;
+  if (D.86165 == 158) goto <L36>; else goto <L166>;

-Invalid sum of incoming frequencies 0, should be 301
-<L162>:;
-  this->l_iter._M_current = this___l_iterthis__I___M_currentthis____.4616;
-  D.68741 = 0;
-  goto <bb 42> (<L174>);
+<L166>:;
+  D.86148 = this->l_iter._M_current + 1B;
+  this->l_iter._M_current = D.86148;
+  if (this->l_end._M_current == D.86148) goto <L36>; else goto <L39>;

<snip>

James

  parent reply	other threads:[~2008-07-12 21:05 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-07-09  3:26 James Gregory
2008-07-09 12:03 ` Lionel B
2008-07-09 16:49   ` James Gregory
2008-07-09 18:08     ` Burlen Loring
2008-07-09 13:43 ` Andrew Bell
2008-07-09 14:35   ` Andrew Haley
2008-07-09 17:02 ` Chris Jefferson
2008-07-10 10:58   ` James Gregory
2008-08-05  6:45     ` Christoph Bartoschek
2008-08-05  9:31       ` James Gregory
2008-07-12 21:16   ` James Gregory [this message]
2008-07-12 21:05     ` James Gregory
2008-07-12 22:11     ` James Gregory

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=beb51c260807121338p6fc40a1dga8adbf5f68a82fc3@mail.gmail.com \
    --to=james.jrg@gmail.com \
    --cc=chris@bubblescope.net \
    --cc=gcc-help@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).