[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: glib 1.1.12, gtk1.1.12 for debian/ppc



On Fri, 15 Jan 1999, Daniel Jacobowitz wrote:
 
> I suspect that alloca itself is not at fault.  Anyway....

well, maybe you are right, but I found out that it is part of the problem.
Removing it removed the bug. And as you can see I have chopped off 99% of
the code. I could not remove anything more, because whatever I did fixed
the bug.

> Notice on the third line of the insn dump, the (const_int 65536).  I am
> fairly sure that that is the invalid part.

You are probably right about that, because it appeared in every failed
compile -and not all were exactly the same.
 
> Look up in the info pages the various options for the optimizer.  Try
> things like -O2 -fno-gcse and -O2 -fno-schedule-insns2.  See which one
> makes it go away, if any do.  Then try -O -fschedule-insns2, etc.

Here's the output with -O2 :
gcc -DHAVE_CONFIG_H -I. -I. -I. -DG_LOG_DOMAIN=g_log_domain_glib  -O2 \
-Wall -D_REENTRANT -c testglib.c

  testglib.c: In function `main':
  testglib.c:9: warning: unused variable `mem'
  testglib.c:48: warning: `dirname' might be used uninitialized in this
  function
  testglib.c:61: internal error--unrecognizable insn:
  (insn 393 390 389 (set (reg:DI 14 r14)
          (mem:DI (plus:SI (reg:SI 14 r14)
                  (const_int 65536)))) -1 (insn_list 74 (insn_list 72
  (insn_list 390 (insn_list:REG_DEP_ANTI 73 (insn_list:REG_DEP_ANTI 385
  (nil))))))
      (nil))
  ../../gcc/toplev.c:1378: Internal compiler error in function fatal_insn

now the same but -O2 -fno-schedule-insns2

gcc -DHAVE_CONFIG_H -I. -I. -I. -DG_LOG_DOMAIN=g_log_domain_glib  -O2 \
-fno-schedule-insns2 -Wall -D_REENTRANT -c testglib.c

  testglib.c: In function `main':
  testglib.c:9: warning: unused variable `mem'
  testglib.c:48: warning: `dirname' might be used uninitialized in this
  function
  testglib.c:61: internal error--unrecognizable insn:
  (insn 393 390 389 (set (reg:DI 14 r14)
          (mem:DI (plus:SI (reg:SI 14 r14)
                  (const_int 65536)))) -1 (nil)
      (nil))
  ../../gcc/toplev.c:1378: Internal compiler error in function fatal_insn

compiling with -O -fschedule-insns2 seemed to solve it.

> Try eliminating as much as you can of that file, starting with the
> other functions, and recompiling it each time to see if the error goes
> away.  Get it as small as you can without eliminating the error,
> preferably under a hundred lines.

how's 62 lines? :) look at the attachment. Well, I must say, that I can
not proceed further from here, because I would need to get dirty with
assembly code and I am no expert in ppc, assembly (I did some z80 assembly
back in spectrum days, but today it's a whole lot different).

Konstantinos Margaritis
kmargar@cc.uoa.gr
#include "glib.h"

int
main (int   argc,
      char *argv[])
{
  gchar *string;

  gchar *mem[10000];
  gint i;
  struct {
    gchar *filename;
    gchar *dirname;
  } dirname_checks[] = {
#ifndef NATIVE_WIN32
    { "/", "/" },
    { "////", "/" },
    { ".////", "." },
    { ".", "." },
    { "..", "." },
    { "../", ".." },
    { "..////", ".." },
    { "", "." },
    { "a/b", "a" },
    { "a/b/", "a/b" },
    { "c///", "c" },
#else
    { "\\", "\\" },
    { ".\\\\\\\\", "." },
    { ".", "." },
    { "..", "." },
    { "..\\", ".." },
    { "..\\\\\\\\", ".." },
    { "", "." },
    { "a\\b", "a" },
    { "a\\b\\", "a\\b" },
    { "c\\\\\\", "c" },
#endif
  };
  guint n_dirname_checks = sizeof (dirname_checks) / sizeof (dirname_checks[0]);
#ifdef G_HAVE_GINT64
  guint64 gu64t1 = G_GINT64_CONSTANT(0x1d636b02300a7aa7U),
	  gu64t2 = G_GINT64_CONSTANT(0xa77a0a30026b631dU);
#endif

  for (i = 0; i < n_dirname_checks; i++)
    {
      gchar *dirname;
      g_free (dirname);
    }

#ifdef G_HAVE_GINT64
  g_assert (GUINT64_SWAP_LE_BE (gu64t1) == gu64t2);  
#endif

#ifdef G_HAVE_ALLOCA
  string = g_alloca(80);
#endif

  return 0;
}


Reply to: