This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
Internal compiler error in `expand_expr', at expr.c:6486
- To: gcc-bugs at gcc dot gnu dot org
- Subject: Internal compiler error in `expand_expr', at expr.c:6486
- From: desh6436 at uidaho dot edu
- Date: Wed, 26 Apr 2000 17:02:23 -0700 (PDT)
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;
}