This is the mail archive of the gcc-bugs@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]

Internal compiler error in `expand_expr', at expr.c:6486


While compiling a software package, I received an internal compiler
error of:

GNU C version 2.95.2 19991024 (release) (i386-unknown-freebsd) compiled by GNU C
 version 2.95.2 19991024 (release).
gdamflange.c: In function `gdam_flange_read':
gdamflange.c:94: Internal compiler error in `expand_expr', at expr.c:6486


I've attached a 'script' output of my version, options I used, and the
error. I've also included the preprocessor output (gzipped), as well as
the original source code.  

The package I was compiling was gdam-0.927, the authors are Dave Benson
<daveb@idealab.com> and Geoff Matters <geoff@ugcs.caltech.edu>,
available at http://www.ffem.org/gdam/download.html.

The headers being included were XFree 3.3.6, GTK+ 1.2.7, and FreeBSD
4.0-STABLE.


Here is a dump of my system information:


uname -a:


FreeBSD molly.smurf.net 4.0-STABLE FreeBSD 4.0-STABLE #5: Fri Apr 21  
19:11:43 PDT 2000     root@:/usr/src/sys/compile/MOLLY  i386


dmesg:


Copyright (c) 1992-2000 The FreeBSD Project.
Copyright (c) 1982, 1986, 1989, 1991, 1993
        The Regents of the University of California. All rights reserved.
FreeBSD 4.0-STABLE #5: Fri Apr 21 19:11:43 PDT 2000
    root@:/usr/src/sys/compile/MOLLY
Timecounter "i8254"  frequency 1193182 Hz
Timecounter "TSC"  frequency 233864556 Hz
CPU: AMD-K6tm w/ multimedia extensions (233.86-MHz 586-class CPU)
  Origin = "AuthenticAMD"  Id = 0x562  Stepping = 2
  Features=0x8001bf<FPU,VME,DE,PSE,TSC,MSR,MCE,CX8,MMX>
  AMD Features=0x400<<b10>>
real memory  = 67108864 (65536K bytes)
config> q
avail memory = 62033920 (60580K bytes)
Preloaded elf kernel "kernel" at 0xc0338000.
Preloaded userconfig_script "/boot/kernel.conf" at 0xc033809c.
md0: Malloc disk
npx0: <math processor> on motherboard
npx0: INT 16 interface
pcib0: <Host to PCI bridge> on motherboard
pci0: <PCI bus> on pcib0
isab0: <Intel 82371AB PCI to ISA bridge> at device 1.0 on pci0
isa0: <ISA bus> on isab0
atapci0: <Intel PIIX4 ATA33 controller> port 0xe000-0xe00f at device 1.1 on pci0
pci0: <Intel 82371AB/EB (PIIX4) USB controller> at 1.2
chip1: <Intel 82371AB Power management controller> port 0xe800-0xe80f at device 1.3 on pci0
sym0: <875> port 0xd400-0xd4ff mem 0xe5800000-0xe5800fff,0xe6000000-0xe60000ff irq 9 at device 9.0 on pci0
sym0: Symbios NVRAM, ID 7, Fast-20, SE, parity checking
sym0: open drain IRQ line driver, using on-chip SRAM
sym0: SCAN AT BOOT disabled for targets 8 9 10 11 12 13 14 15.
sym0: SCAN FOR LUNS disabled for targets 0 3 4.
xl0: <3Com 3c905-TX Fast Etherlink XL> port 0xd000-0xd03f irq 10 at device 11.0 on pci0
xl0: Ethernet address: 00:60:97:c2:e8:cc
miibus0: <MII bus> on xl0
nsphy0: <DP83840 10/100 media interface> on miibus0
nsphy0:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
pci0: <Matrox MGA 1024SG/1064SG/1164SG graphics accelerator> at 12.0
fdc0: <NEC 72065B or clone> at port 0x3f0-0x3f5,0x3f7 irq 6 drq 2 on isa0
fdc0: FIFO enabled, 8 bytes threshold
fd0: <1440-KB 3.5" drive> on fdc0 drive 0
atkbdc0: <Keyboard controller (i8042)> at port 0x60,0x64 on isa0
atkbd0: <AT Keyboard> irq 1 on atkbdc0
vga0: <Generic ISA VGA> at port 0x3c0-0x3df iomem 0xa0000-0xbffff on isa0
sc0: <System console> on isa0
sc0: VGA <16 virtual consoles, flags=0x200>
sio0 at port 0x3f8-0x3ff irq 4 flags 0x10 on isa0
sio0: type 16550A
sio1 at port 0x2f8-0x2ff irq 3 on isa0
sio1: type 16550A
ppc0: <Parallel port> at port 0x378-0x37f irq 7 on isa0
ppc0: SMC-like chipset (ECP/EPP/PS2/NIBBLE) in COMPATIBLE mode
ppc0: FIFO with 16/16/9 bytes threshold
lpt0: <Printer> on ppbus0
lpt0: Interrupt-driven port
pca0 at port 0x40 on isa0
sbc0: <Creative SB16/SB32> at port 0x220-0x22f,0x330-0x331,0x388-0x38b irq 5 drq 1,5 on isa0
sbc0: setting card to irq 5, drq 1, 5
pcm0: <SB DSP 4.13> on sbc0
unknown0: <Generic ESDI/IDE/ATA controller> at port 0x1e8-0x1ef,0x3ee-0x3ef irq 11 on isa0
unknown1: <Reserved> at port 0x100 on isa0
unknown2: <Game> at port 0x200-0x207 on isa0
Waiting 8 seconds for SCSI devices to settle
(noperiph:sym0:0:-1:-1): SCSI BUS reset delivered.
Mounting root from ufs:/dev/da0s1a





+-------------------------------------------------------------------+
 \  Jon DeShirley - desh6436@uidaho.edu                    ((__))    \ 
  \  http://www.uidaho.edu/~desh6436                        (00)      \  
   +----------------------------------------------------nn-(o__o)-nn---+
Script started on Wed Apr 26 16:36:40 2000
[ molly:jond -> /usr/tmp/gdam-0.927/server/plugins > gcc -v --save-temps -DHAVE_ 
CONFIG_H -I. -I. -I../../common -I../.. -DGDAM_VERSION=\"0.927\" -I/usr/X11R6/in 
clude/gtk12 -I/usr/local/include/glib12 -I/usr/local/include -I/usr/X11R6/includ 
e -O2 -c  -fPIC -DPIC gdamflange.c -o .libs/gdamflange.lo
Using builtin specs.
gcc version 2.95.2 19991024 (release)
 /usr/libexec/cpp -lang-c -v -I. -I. -I../../common -I../.. -I/usr/X11R6/include/gtk12 -I/usr/local/include/glib12 -I/usr/local/include -I/usr/X11R6/include -D__GNUC__=2 -D__GNUC_MINOR__=95 -Di386 -Dunix -D__FreeBSD__=4 -D__FreeBSD_cc_version=400004 -D__i386__ -D__unix__ -D__FreeBSD__=4 -D__FreeBSD_cc_version=400004 -D__i386 -D__unix -Acpu(i386) -Amachine(i386) -Asystem(unix) -Asystem(FreeBSD) -D__OPTIMIZE__ -Acpu(i386) -Amachine(i386) -Di386 -D__i386 -D__i386__ -D__ELF__ -D__PIC__ -D__pic__ -DHAVE_CONFIG_H -DGDAM_VERSION="0.927" -DPIC gdamflange.c gdamflange.i
GNU CPP version 2.95.2 19991024 (release) (i386 FreeBSD/ELF)
#include "..." search starts here:
#include <...> search starts here:
 .
 ../../common
 ../..
 /usr/X11R6/include/gtk12
 /usr/local/include/glib12
 /usr/local/include
 /usr/X11R6/include
 /usr/include
 /usr/include
End of search list.
The following default directories have been omitted from the search path:
 /usr/include/g++
End of omitted list.
 /usr/libexec/cc1 gdamflange.i -quiet -dumpbase gdamflange.c -O2 -version -fPIC -o gdamflange.s
GNU C version 2.95.2 19991024 (release) (i386-unknown-freebsd) compiled by GNU C version 2.95.2 19991024 (release).
gdamflange.c: In function `gdam_flange_read':
gdamflange.c:94: Internal compiler error in `expand_expr', at expr.c:6486
Please submit a full bug report.
See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions.
[ molly:jond -> /usr/tmp/gdam-0.927/server/plugins > exit

Script done on Wed Apr 26 16:36:55 2000

gdamflange.i.gz

/*
    GDAM - Geoff & Dave's Audio Mixer
    Copyright (C) 1999    Dave Benson, Geoff Matters.

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA

    Contact:
        daveb@ffem.org <Dave Benson>
        geoff@ugcs.caltech.edu <Geoff Matters>
*/

#include "gdamflange.h"
#include <common/gdamplugin.h>
#include <server/gdamnamespace.h>

static int gdam_flange_read(GdamSource*    source,
                            GdamSample*    buffer,
			    int            max_read)
{
	GdamFlange* flange = GDAM_FLANGE(source);
	GdamBufferingFilter* buffering_filter = GDAM_BUFFERING_FILTER(source);
	gboolean chorus = flange->chorus;

	GdamSample* modulation = NULL;
	int num_read;
	int i;
	int effect = flange->effect;

	num_read = gdam_filter_sub_read(GDAM_FILTER(source), buffer, max_read);

	/* Fill modulation buffer. */
	if (num_read > 0) {
		int mod_read = 0;
		modulation = alloca(sizeof(GdamSample) * num_read);
		if (flange->modulator != NULL) {
			mod_read = gdam_source_read(flange->modulator,
			                            modulation,
						    num_read);
		}
		if (mod_read < num_read)
			gdam_sample_zero(modulation + mod_read,
			                 num_read - mod_read);
	}

	for (i = 0; i < num_read; i++) {
		int channel;
		int init[2];
		GdamSample tmp_sample;
		init[0] = (int)buffer[i].s[0] * effect / GdamFixed_ONE;
		init[1] = (int)buffer[i].s[1] * effect / GdamFixed_ONE;
		if (chorus) {
			GdamSample tmp;
			tmp.s[0] = init[0];
			tmp.s[1] = init[1];
			gdam_buffering_filter_append_sample(buffering_filter,
							    tmp);
		}
		for (channel = 0; channel < 2; channel++) {
			int mod;
			int value = buffer[i].s[channel];
			int echo;
			GdamFixed factor;
			int sum;
			int extra_value;

			sum = init[channel];
			extra_value = value - sum;
			
			mod = modulation[i].s[channel] - GDAM_SAMPLE_MIN;
			factor = (GdamFixed) ( ((gint64)mod
			                 * flange->delta_echo_factor)
					       >> (GDAM_SAMPLE_LOG+1) );
			factor += flange->min_echo_factor;

			for (echo = 0; echo < flange->num_echoes; echo++) {
				int delay;
				int value;
				int volume;
				delay = flange->echoes[echo].delay;
				delay = (gint64)factor * delay / GdamFixed_ONE;
				value = gdam_buffering_filter_sample_at
					(buffering_filter, delay).s[channel];
				volume = flange->echoes[echo].volume;
				sum += GDAM_FIXED_MUL(volume, value);
			}

			tmp_sample.s[channel] = GDAM_SAMPLE_CLAMP(sum);
			sum += extra_value;
			buffer[i].s[channel] = GDAM_SAMPLE_CLAMP(sum);
		}
		if (!chorus) {
			gdam_buffering_filter_append_sample(buffering_filter,
							    tmp_sample);
		}
	}
	return num_read;
}

static void do_ensure_space(GdamFlange* flange)
{
	int max_delay = 0;
	int i;
	int required;
	GdamFixed max_echo_factor;
	for (i = 0; i < flange->num_echoes; i++) {
		int delay = flange->echoes[i].delay;
		if (delay > max_delay)
			max_delay = delay;
	}
	max_echo_factor = flange->min_echo_factor + flange->delta_echo_factor;
	required = (int)(((gint64)max_delay * max_echo_factor) / GdamFixed_ONE);
	gdam_buffering_filter_ensure_space((GdamBufferingFilter*)flange,
	                                   required + 1);
}

static void gdam_flange_arg_set_min_max(GtkObject* object, GdamArg* arg)
{
	gdouble* array = GDAM_ARG_DOUBLE_ARRAY(arg).array;
	int length = GDAM_ARG_DOUBLE_ARRAY(arg).length;
	GdamFlange* flange = GDAM_FLANGE(object);
	if (length != 2 || array[0] < 0.0 || array[0] > array[1]) {
		gdam_debug("array to flange::min_max was malformed");
		return;
	}
	if (array[1] > 100.0) {
		gdam_debug("flange: scale too large");
		return;
	}
	flange->min_echo_factor = GDAM_FIXED_FROM_DOUBLE(array[0]);
	flange->delta_echo_factor = GDAM_FIXED_FROM_DOUBLE(array[1]-array[0]);
	do_ensure_space(flange);
}
static void gdam_flange_arg_get_min_max(GtkObject* object, GdamArg* arg)
{
	gdouble* array;
	int max_echo_factor;
	GdamFlange* flange;
	array = g_new(gdouble, 2);
	GDAM_ARG_DOUBLE_ARRAY(arg).array = array;
	GDAM_ARG_DOUBLE_ARRAY(arg).length = 2;
	flange = GDAM_FLANGE(object);
	array[0] = GDAM_FIXED_TO_DOUBLE(flange->min_echo_factor);
	max_echo_factor = flange->min_echo_factor + flange->delta_echo_factor;
	array[1] = GDAM_FIXED_TO_DOUBLE(max_echo_factor);
}
static void gdam_flange_arg_set_echoes(GtkObject* object, GdamArg* arg)
{
	int num_echoes = GDAM_ARG_INT_ARRAY(arg).length / 2;
	GdamEchoElement* elements = g_new(GdamEchoElement, num_echoes * 2);
	int* array = GDAM_ARG_INT_ARRAY(arg).array;
	int i;
	GdamFlange* flange = GDAM_FLANGE(object);
	for (i = 0; i < num_echoes; i++) {
		elements[i].volume = array[2*i+0];
		elements[i].delay = array[2*i+1];
	}
	if (flange->echoes != NULL)
		g_free(flange->echoes);
	flange->echoes = elements;
	flange->num_echoes = num_echoes;
	do_ensure_space(flange);
}
static void gdam_flange_arg_get_echoes(GtkObject* object, GdamArg* arg)
{
	GdamFlange* flange = GDAM_FLANGE(object);
	int num_echoes = flange->num_echoes;
	int* array = g_new(int, num_echoes*2);
	int i;
	for (i = 0; i < num_echoes; i++) {
		array[2*i+0] = flange->echoes[i].volume;
		array[2*i+1] = flange->echoes[i].delay;
	}
	GDAM_ARG_INT_ARRAY(arg).length = num_echoes * 2;
	GDAM_ARG_INT_ARRAY(arg).array = array;
}

static void gdam_flange_arg_set_chorus(GtkObject* object, GdamArg* arg)
{
	int chorus = GDAM_ARG_INT(arg);
	GDAM_FLANGE(object)->chorus = chorus ? TRUE : FALSE;
}
static void gdam_flange_arg_get_chorus(GtkObject* object, GdamArg* arg)
{
	GDAM_ARG_INT(arg) = GDAM_FLANGE(object)->chorus;
}

static void gdam_flange_arg_set_effect(GtkObject* object, GdamArg* arg)
{
	GdamFlange* flange = GDAM_FLANGE(object);
	flange->effect = GDAM_ARG_DOUBLE(arg) * GdamFixed_ONE;
	flange->effect = CLAMP(flange->effect, 0, GdamFixed_ONE);
}
static void gdam_flange_arg_get_effect(GtkObject* object, GdamArg* arg)
{
	GdamFlange* flange = GDAM_FLANGE(object);
	GDAM_ARG_DOUBLE(arg) = (gdouble) flange->effect / GdamFixed_ONE;
}

static void gdam_flange_arg_set_modulator(GtkObject* object, GdamArg* arg)
{
	int source_id = GDAM_ARG_INT(arg);
	GdamSource* sub = gdam_namespace_local_source(source_id);
	gdam_flange_set_modulator(GDAM_FLANGE(object), sub);
}
static void gdam_flange_arg_get_modulator(GtkObject* object, GdamArg* arg)
{
	GdamSource* modulator = GDAM_FLANGE(object)->modulator;
	GDAM_ARG_INT(arg) = modulator ? modulator->source_id : 0;
}

static void gdam_flange_init(GdamFlange* flange)
{
	flange->min_echo_factor = GdamFixed_ONE;
	flange->effect = GdamFixed_ONE;
}
static void gdam_flange_class_init(GdamFlangeClass* flange_class)
{
	GtkObjectClass* object_class;

	GDAM_SOURCE_CLASS(flange_class)->read = gdam_flange_read;

	object_class = GTK_OBJECT_CLASS(flange_class);
	gdam_arg_register(object_class,
	                  "min_max",
			  GDAM_ARG_TYPE_DOUBLE_ARRAY,
			  gdam_flange_arg_set_min_max,
			  gdam_flange_arg_get_min_max,
			  GDAM_ARG_VITAL);
	gdam_arg_register(object_class,
	                  "echoes",
			  GDAM_ARG_TYPE_INT_ARRAY,
			  gdam_flange_arg_set_echoes,
			  gdam_flange_arg_get_echoes,
			  GDAM_ARG_VITAL);
	gdam_arg_register(object_class,
	                  "modulator",
			  GDAM_ARG_TYPE_INT,
			  gdam_flange_arg_set_modulator,
			  gdam_flange_arg_get_modulator,
			  GDAM_ARG_VITAL);
	gdam_arg_register(object_class,
	                  "chorus",
			  GDAM_ARG_TYPE_INT,
			  gdam_flange_arg_set_chorus,
			  gdam_flange_arg_get_chorus,
			  GDAM_ARG_VITAL);
	gdam_arg_register(object_class,
	                  "effect",
			  GDAM_ARG_TYPE_DOUBLE,
			  gdam_flange_arg_set_effect,
			  gdam_flange_arg_get_effect,
			  GDAM_ARG_VITAL);
}

GtkType gdam_flange_get_type()
{
	static GtkType flange_type = 0;
	if (!flange_type) {
		static const GtkTypeInfo flange_info = {
			"GdamFlange",
			sizeof(GdamFlange),
			sizeof(GdamFlangeClass),
			(GtkClassInitFunc) gdam_flange_class_init,
			(GtkObjectInitFunc) gdam_flange_init,
			/* reserved_1 */ NULL,
			/* reserved_2 */ NULL,
			(GtkClassInitFunc) NULL
		};
		GtkType parent = GDAM_TYPE_BUFFERING_FILTER;
		flange_type = gtk_type_unique(parent,
		                                 &flange_info);
		gdam_plugin_check_version(__FILE__, VERSION);
	}
	return flange_type;
}
void gdam_flange_set_modulator(GdamFlange* flange, GdamSource* mod)
{
	if (flange->modulator != NULL) {
		GdamSource* old_mod = flange->modulator;
		flange->modulator = NULL;
		old_mod->parent = NULL;
		gtk_object_unref(GTK_OBJECT(old_mod));
	}
	if (mod != NULL) {
		GtkObject* object = GTK_OBJECT(mod);
		gtk_object_ref(object);
		gtk_object_sink(object);
	}
	flange->modulator = mod;
}

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