Article View: gnu.gcc.bug
Article #884gcc bug.
From: Rohit Chandra
Date: Wed, 17 Jan 1990 23:29
Date: Wed, 17 Jan 1990 23:29
157 lines
5772 bytes
5772 bytes
I am trying to compile g++ using gcc on a MIPS M-2000 running RISC/OS 4.0,
(with one change in va-mips.h)
when the compiler crashes with the message: Program cc1 got fatal signal 4,
while trying to compile the file expr.c
Details follow:
Version: gcc version 1.36
Input file: expr.c from gcc version 1.36.1- (based on GCC 1.36)
with the include files in that version of g++.
(with one change in va-mips.h, described below).
Options:
-c
-DGATHER_STATISTICS
-Wunused
-DUSE_COLLECT
-DEXTENDED_COFF
-DFASCIST_ASSEMBLER
-I.
-I./config
tm.h = tm-mips-bsd.h
md = mips.md
[I have made some changes in the machine description files.
I *believe* these should not affect the bug, and hope you can still
reproduce it.]
Machine = mips m2000-8, Running RISC/OS 4.0
Error: The compiler dies with the following message-
> gcc: Program cc1 got fatal signal 4.
> *** Error code 1
>
> Stop.
To Reproduce the bug:
---------------------
I am CHANGING the definitions in va-mips.h, included through
gvarargs.h in the input file expr.c.
Specifically, I am changing
(a) typedef struct
{ int pnt;
char *stack;
double *fpregs;
} va_list ;
to:
(b) typdef char *va_list;
Compilation goes through fine for definition (a) - the original one -
and the bug appears for definition (b) of va_list.
[I also make the corresponding changes in the related macros
va_alist, va_dcl, va_start, va_arg, va_end,
but they do not affect the bug since the bug remains even if I remove
all uses of these macros from the input file expr.c ]
Therefore, to reproduce the bug, all you should need to do is:
change the typedef of va_list in va-mips.h
to typedef char* va_list;
and perhaps comment out the *statements* (not the declarations) within
emit_library_call in expr.c since they use the macros va_start,
va_arg, va_end and therefore depend on the typedef of va_list.
Description of the bug:
-----------------------
The error occurs while parsing the declaration
CUMULATIVE_ARGS args_so_far;
in the function expand_call in the file expr.c.
CUMULATIVE_ARGS args_so_far is defined to be
#define CUMULATIVE_ARGS struct { \
enum arg_state arg_rec_state;\
int restype,arg_num;\
}
The stack at that point (while debugging cc1) is:
(dbx) run expr.cpp
init_comparisons init_expr enqueue_insn protect_from_queue queued_subexp_p
emit_queue init_queue convert_move convert_to_mode integer_mode_p
move_by_pieces move_by_pieces_ninsns move_by_pieces_1 emit_block_move
move_block_to_reg move_block_from_reg use_regs clear_storage
emit_move_insn push_block gen_push_operand emit_push_insn
emit_library_call expand_assignment store_expr store_constructor
store_field force_operand save_noncopied_parts init_noncopied_parts
validate_subtarget expand_expr
expr.c: In function expand_expr:
expr.c:3014: warning:assignment of pointer from integer lacks a cast
expr.c:3024: warning:assignment of pointer from integer lacks a cast
expand_builtin expand_increment preexpand_calls prepare_call_address
emit_call_1 init_pending_stack_adjust clear_pending_stack_adjust
do_pending_stack_adjust expand_cleanups_to expand_call
Illegal instruction [abort.abort:22 ,0x4ac920]
Source not available
(dbx) where
> 0 abort.abort(0x100243c8, 0x10024458, 0x7fff9c98, 0x7fff999c, 0x42e550) ["ab
ort.s":22, 0x4ac920]
1 .block44 ["expr.c":3122, 0x4308bc]
2 expand_expr(exp = 0x10024900, target = 0x10024ec8, tmode = VOIDmode, modif
ier = EXPAND_NORMAL) ["expr.c":3122, 0x4308bc]
3 store_expr(exp = 0x10024900, target = 0x10024ec8, suggest_reg = 0) ["expr.
c":1823, 0x42d07c]
4 .block26 ["expr.c":2268, 0x42e24c]
5 expand_expr(exp = 0x10024ea8, target = (nil), tmode = VOIDmode, modifier =
EXPAND_NORMAL) ["expr.c":2268, 0x42e24c]
6 variable_size(0x7fff9c9a, 0x0, 0x40b064, 0x1001e510, 0xffffff8c) ["stor-la
yout.c":161, 0x42031c]
7 layout_type(0x40bad4, 0x0, 0x10024ea8, 0x0, 0x74) ["stor-layout.c":929, 0x
4222bc]
8 finish_struct(0x10024d50, 0x10123a88, 0x10020828, 0x0, 0x0) ["c-decl.c":32
05, 0x40c17c]
9 yyparse(0x10008f74, 0x2000, 0xa, 0x0, 0x2) ["c-parse.tab.c":773, 0x401864]
10 compile_file(0x0, 0x0, 0x0, 0x0, 0x0) ["toplev.c":1113, 0x41708c]
11 main(0x7fff9f74, 0x7fff9f80, 0x0, 0x0, 0x0) ["toplev.c":1981, 0x418dcc]
(dbx)
It is somehow related to the declarations
register va_list p;
...
CUMULATIVE_ARGS args_so_far;
in the function emit_library_call, the only function to use varargs in
the entire file. (emit_library_call occurs before the function
expand_call in expr.c).
If I move the declaration of CUMULATIVE_ARGS within emit_library_call from:
register va_list p;
...
CUMULATIVE_ARGS args_so_far;
to:
CUMULATIVE_ARGS args_so_far;
register va_list p;
... (same declarations in the original order)
then the error goes away.
Although this message is long, I wonder if I have described the bug
well. I will be happy to answer any more questions that you have. You
can reach me at:
rohit@mips.com, or rohit@cs.stanford.edu
408-991-6545 (work)
Technical Details
Message-ID:
<9001172329.AA10816@batman.mips.com>Path:
arc1-ca.pugleaf.net!utzoo!utgpu!jarvis.csri.toronto.edu!cs.utexas.edu!tut.cis.ohio-state.edu!MIPS.COM!rohitShow Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!utgpu!jarvis.csri.toronto.edu!cs.utexas.edu!tut.cis.ohio-state.edu!MIPS.COM!rohit From: rohit@MIPS.COM (Rohit Chandra) Newsgroups: gnu.gcc.bug Subject: gcc bug. Message-ID: <9001172329.AA10816@batman.mips.com> Date: 17 Jan 90 23:29:33 GMT Sender: daemon@tut.cis.ohio-state.edu Distribution: gnu Organization: GNUs Not Usenet Lines: 157