This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
egcs-1.1b alpha-dec-osf3.2 internal error in change_address()
- To: egcs-bugs at cygnus dot com
- Subject: egcs-1.1b alpha-dec-osf3.2 internal error in change_address()
- From: Fergus Henderson <fjh at cs dot mu dot OZ dot AU>
- Date: Mon, 29 Mar 1999 20:01:32 +1000
Compiling the attached program bug.c with egcs-1.1 on an alpha-dec-osf3.2
system results in the message "emit-rtl.c:1491: Internal compiler error
in function change_address".
This program was extracted from automatically-generated C code generated
by the Mercury compiler. It makes use of gcc's global register variables
extension but should otherwise be pretty much standard ANSI C.
Here's a transcript.
$ gcc -c bug.c
../../egcs-1.1b/gcc/emit-rtl.c:1491: Internal compiler error in function change_address
$ gcc -v
Reading specs from /usr/local/apps/egcs-1.1b/lib/gcc-lib/alpha-dec-osf3.2/egcs-2.91.57/specs
gcc version egcs-2.91.57 19980901 (egcs-1.1 release)
$ uname -a
OSF1 murlibobo.cs.mu.OZ.AU V3.2 69.73 alpha
--
Fergus Henderson <fjh@cs.mu.oz.au> | "I have always known that the pursuit
WWW: <http://www.cs.mu.oz.au/~fjh> | of excellence is a lethal habit"
PGP: finger fjh@128.250.37.3 | -- the last words of T. S. Garp.
typedef unsigned long Word;
typedef long Integer;
typedef unsigned long Unsigned;
typedef long Bool;
typedef void Code;
typedef double Float64;
typedef char Char;
typedef unsigned char UnsignedChar;
typedef Char *String;
typedef const Char *ConstString;
typedef void (*Cont) (void);
register Word mr0 __asm__("$9");
register Word mr1 __asm__("$10");
register Word mr2 __asm__("$11");
register Word mr3 __asm__("$12");
register Word mr4 __asm__("$13");
register Word mr5 __asm__("$14");
register Word mr6 __asm__("$15");
extern Word get_reg(int);
extern Word set_reg(int, Word);
typedef long unsigned int size_t;
typedef struct {
int _cnt;
unsigned char *_ptr;
unsigned char *_base;
int _bufsiz;
short _flag;
short _file;
char *__newbase;
void *_lock;
unsigned char *_bufendp;
} FILE;
typedef struct mercury_file {
FILE *file;
int line_number;
} MercuryFile;
typedef struct {
Integer size;
Word elements[1];
} MR_ArrayType;
extern Word virtual_reg_map[32 ];
extern unsigned long num_uses[(32 + 11) ];
typedef struct MEMORY_ZONE MemoryZone;
typedef char ZoneHandler(Word *addr, struct MEMORY_ZONE *zone, void *context);
struct MEMORY_ZONE {
struct MEMORY_ZONE *next;
const char *name;
int id;
Word *bottom;
Word *top;
Word *min;
Word *max;
Word *hardmax;
Word *redzone_base;
Word *redzone;
ZoneHandler *handler;
};
void init_memory_arena(void);
void init_zones(void);
MemoryZone *create_zone(const char *name, int id,
size_t size, size_t offset, size_t redsize,
ZoneHandler *handler);
MemoryZone *construct_zone(const char *name, int Id, Word *base,
size_t size, size_t offset, size_t redsize,
ZoneHandler *handler);
void reset_redzone(MemoryZone *zone);
MemoryZone *get_used_memory_zones(void);
void debug_memory(void);
extern size_t next_offset(void);
extern void init_memory(void);
extern void init_heap(void);
extern void debug_memory(void);
extern void *allocate_bytes(size_t numbytes);
void deallocate_memory(void *);
void *checked_malloc(size_t n);
void *checked_realloc(void *old, size_t n);
char *MR_copy_string(const char *s);
extern size_t unit;
extern size_t page_size;
typedef enum {
MR_undo,
MR_commit,
MR_solve,
MR_exception,
MR_gc
} MR_untrail_reason;
typedef enum {
MR_val_entry,
MR_func_entry
} MR_trail_entry_kind;
typedef void MR_untrail_func_type(void *datum, MR_untrail_reason);
typedef struct {
union {
struct {
Word *MR_address;
Word MR_value;
} MR_val;
struct {
MR_untrail_func_type *MR_untrail_func;
void *MR_datum;
} MR_func;
} MR_union;
} MR_TrailEntry;
extern MemoryZone *MR_trail_zone;
extern MR_TrailEntry *MR_trail_ptr_var;
extern Unsigned MR_ticket_counter_var;
void MR_untrail_to(MR_TrailEntry *old_trail_ptr, MR_untrail_reason reason);
typedef Unsigned MR_ChoicepointId;
typedef enum { MR_use_now, MR_use_later } MR_when_to_use;
void init_thread(MR_when_to_use);
typedef struct s_list {
union {
void *l_data;
int l_length;
} l_union;
struct s_list *l_prev;
struct s_list *l_next;
} List;
extern List *makelist0(void);
extern List *list_makelist(void *);
extern List *list_addhead(List *, void *);
extern List *list_addtail(List *, void *);
extern List *addlist(List *, List *);
extern List *addndlist(List *, List *);
extern void list_insert_before(List *, List *, void *);
extern void list_insert_after(List *, List *, void *);
extern int length(const List *);
extern void dlist_delete(List *, List *, void (*)(void *));
extern void oldlist(List *, void (*)(void *));
typedef enum { MR_PREDICATE, MR_FUNCTION } MR_PredFunc;
typedef Word MR_Determinism;
typedef Word MR_Live_Lval;
typedef enum {
MR_LVAL_TYPE_R,
MR_LVAL_TYPE_F,
MR_LVAL_TYPE_STACKVAR,
MR_LVAL_TYPE_FRAMEVAR,
MR_LVAL_TYPE_SUCCIP,
MR_LVAL_TYPE_MAXFR,
MR_LVAL_TYPE_CURFR,
MR_LVAL_TYPE_HP,
MR_LVAL_TYPE_SP,
MR_LVAL_TYPE_INDIRECT,
MR_LVAL_TYPE_UNKNOWN
} MR_Lval_Type;
typedef Word MR_Live_Type;
typedef enum {
MR_LIVE_TYPE_SUCCIP,
MR_LIVE_TYPE_HP,
MR_LIVE_TYPE_CURFR,
MR_LIVE_TYPE_MAXFR,
MR_LIVE_TYPE_REDOIP,
MR_LIVE_TYPE_UNWANTED
} MR_Lval_NonVar;
typedef struct {
Word *pseudo_type_info;
Word inst;
} MR_Var_Shape_Info;
typedef struct MR_Stack_Layout_Var_Struct {
MR_Live_Lval MR_slv_locn;
MR_Live_Type MR_slv_live_type;
} MR_Stack_Layout_Var;
typedef struct MR_Stack_Layout_Vars_Struct {
MR_Stack_Layout_Var *MR_slvs_pairs;
String *MR_slvs_names;
MR_Live_Lval *MR_slvs_tvars;
} MR_Stack_Layout_Vars;
typedef struct MR_Stack_Layout_User_Proc_Struct {
MR_PredFunc MR_user_pred_or_func;
ConstString MR_user_decl_module;
ConstString MR_user_def_module;
ConstString MR_user_name;
Integer MR_user_arity;
Integer MR_user_mode;
} MR_Stack_Layout_User_Proc;
typedef struct MR_Stack_Layout_Compiler_Proc_Struct {
ConstString MR_comp_type_name;
ConstString MR_comp_type_module;
ConstString MR_comp_def_module;
ConstString MR_comp_pred_name;
Integer MR_comp_arity;
Integer MR_comp_mode;
} MR_Stack_Layout_Compiler_Proc;
typedef union MR_Stack_Layout_Proc_Id_Union {
MR_Stack_Layout_User_Proc MR_proc_user;
MR_Stack_Layout_Compiler_Proc MR_proc_comp;
} MR_Stack_Layout_Proc_Id;
typedef struct MR_Stack_Layout_Entry_Struct {
Code *MR_sle_code_addr;
MR_Determinism MR_sle_detism;
Integer MR_sle_stack_slots;
MR_Live_Lval MR_sle_succip_locn;
MR_Stack_Layout_Proc_Id MR_sle_proc_id;
struct MR_Stack_Layout_Label_Struct
*MR_sle_call_label;
Integer MR_sle_maybe_from_full;
Integer MR_sle_maybe_decl_debug;
} MR_Stack_Layout_Entry;
typedef struct MR_Stack_Layout_Label_Struct {
MR_Stack_Layout_Entry *MR_sll_entry;
Integer MR_sll_var_count;
MR_Stack_Layout_Vars MR_sll_var_info;
} MR_Stack_Layout_Label;
typedef struct s_entry {
const Code *e_addr;
const MR_Stack_Layout_Entry *e_layout;
const char *e_name;
} MR_Entry;
typedef struct s_internal {
const Code *i_addr;
const MR_Stack_Layout_Label *i_layout;
const char *i_name;
} MR_Internal;
extern void MR_do_init_label_tables(void);
extern void MR_insert_internal_label(const char *name, Code *addr,
const MR_Stack_Layout_Label *label_layout);
extern MR_Internal *MR_lookup_internal_by_addr(const Code *addr);
extern void MR_process_all_internal_labels(void f(const void *));
typedef Code * ModuleFunc(void);
typedef struct MR_context_struct MR_Context;
struct MR_context_struct {
struct MR_context_struct *next;
Code *resume;
Code *context_succip;
MemoryZone *detstack_zone;
Word *context_sp;
MemoryZone *nondetstack_zone;
Word *context_maxfr;
Word *context_curfr;
Word *context_hp;
Word *min_hp_rec;
};
typedef MR_Context Context;
extern MR_Context *MR_runqueue_head;
extern MR_Context *MR_runqueue_tail;
typedef enum {
MR_PENDING_READ = 0x01,
MR_PENDING_WRITE = 0x02,
MR_PENDING_EXEC = 0x04
} MR_WaitingMode;
typedef struct MR_PENDING_CONTEXT {
struct MR_PENDING_CONTEXT *next;
MR_Context *context;
int fd;
MR_WaitingMode waiting_mode;
} MR_PendingContext;
extern MR_PendingContext *MR_pending_contexts;
void init_context(MR_Context *context);
MR_Context *create_context(void);
void destroy_context(MR_Context *context);
void init_thread_stuff(void);
void finalize_runqueue(void);
void flounder(void);
void schedule(MR_Context *ctxt);
extern Code * do_runnext (void) ;
typedef struct sync_term_struct SyncTerm;
struct sync_term_struct {
int count;
MR_Context *parent;
};
typedef struct MR_dword
{
unsigned long low_word;
unsigned long high_word;
} MR_dword;
typedef struct MR_memprof_counter
{
MR_dword cells_at_period_start;
MR_dword words_at_period_start;
MR_dword cells_since_period_start;
MR_dword words_since_period_start;
} MR_memprof_counter;
typedef struct MR_memprof_record
{
const char *name;
Code *addr;
MR_memprof_counter counter;
struct MR_memprof_record *left;
struct MR_memprof_record *right;
} MR_memprof_record;
typedef struct MR_memprof_table
{
MR_memprof_record *root;
int num_entries;
} MR_memprof_table;
extern MR_memprof_counter MR_memprof_overall;
extern MR_memprof_table MR_memprof_procs;
extern MR_memprof_table MR_memprof_types;
extern void MR_record_allocation(int size, Code *proc_addr,
const char *proc_name, const char *type);
extern void MR_prof_output_mem_tables(void);
typedef void * GC_PTR;
typedef unsigned long GC_word;
typedef long GC_signed_word;
extern GC_word GC_gc_no;
extern GC_PTR (*GC_oom_fn) (size_t bytes_requested) ;
extern int GC_quiet;
extern int GC_dont_gc;
extern int GC_dont_expand;
extern int GC_full_freq;
extern GC_word GC_non_gc_bytes;
extern GC_word GC_free_space_divisor;
extern GC_word GC_max_retries;
extern GC_PTR GC_malloc (size_t size_in_bytes) ;
extern GC_PTR GC_malloc_atomic (size_t size_in_bytes) ;
extern GC_PTR GC_malloc_uncollectable (size_t size_in_bytes) ;
extern GC_PTR GC_malloc_stubborn (size_t size_in_bytes) ;
extern GC_PTR GC_malloc_atomic_uncollectable (size_t size_in_bytes) ;
extern void GC_free (GC_PTR object_addr) ;
extern void GC_change_stubborn (GC_PTR) ;
extern void GC_end_stubborn_change (GC_PTR) ;
extern GC_PTR GC_base (GC_PTR displaced_pointer) ;
extern size_t GC_size (GC_PTR object_addr) ;
extern GC_PTR GC_realloc (GC_PTR old_object,
size_t new_size_in_bytes) ;
extern int GC_expand_hp (size_t number_of_bytes) ;
extern void GC_set_max_heap_size (GC_word n) ;
extern void GC_exclude_static_roots (GC_PTR start, GC_PTR finish) ;
extern void GC_clear_roots (void) ;
extern void GC_add_roots (char * low_address,
char * high_address_plus_1) ;
extern void GC_register_displacement (GC_word n) ;
extern void GC_debug_register_displacement (GC_word n) ;
extern void GC_gcollect (void) ;
typedef int (* GC_stop_func) (void) ;
extern int GC_try_to_collect (GC_stop_func stop_func) ;
extern size_t GC_get_heap_size (void) ;
extern size_t GC_get_bytes_since_gc (void) ;
extern void GC_enable_incremental (void) ;
extern int GC_collect_a_little (void) ;
extern GC_PTR GC_malloc_ignore_off_page (size_t lb) ;
extern GC_PTR GC_malloc_atomic_ignore_off_page (size_t lb) ;
extern GC_PTR GC_debug_malloc
(size_t size_in_bytes, char * descr_string, int descr_int ) ;
extern GC_PTR GC_debug_malloc_atomic
(size_t size_in_bytes, char * descr_string, int descr_int ) ;
extern GC_PTR GC_debug_malloc_uncollectable
(size_t size_in_bytes, char * descr_string, int descr_int ) ;
extern GC_PTR GC_debug_malloc_stubborn
(size_t size_in_bytes, char * descr_string, int descr_int ) ;
extern void GC_debug_free (GC_PTR object_addr) ;
extern GC_PTR GC_debug_realloc
(GC_PTR old_object, size_t new_size_in_bytes,
char * descr_string, int descr_int ) ;
extern void GC_debug_change_stubborn (GC_PTR) ;
extern void GC_debug_end_stubborn_change (GC_PTR) ;
typedef void (*GC_finalization_proc)
(GC_PTR obj, GC_PTR client_data) ;
extern void GC_register_finalizer
(GC_PTR obj, GC_finalization_proc fn, GC_PTR cd,
GC_finalization_proc *ofn, GC_PTR *ocd) ;
extern void GC_debug_register_finalizer
(GC_PTR obj, GC_finalization_proc fn, GC_PTR cd,
GC_finalization_proc *ofn, GC_PTR *ocd) ;
extern void GC_register_finalizer_ignore_self
(GC_PTR obj, GC_finalization_proc fn, GC_PTR cd,
GC_finalization_proc *ofn, GC_PTR *ocd) ;
extern void GC_debug_register_finalizer_ignore_self
(GC_PTR obj, GC_finalization_proc fn, GC_PTR cd,
GC_finalization_proc *ofn, GC_PTR *ocd) ;
extern int GC_register_disappearing_link (GC_PTR * ) ;
extern int GC_general_register_disappearing_link
(GC_PTR * , GC_PTR obj) ;
extern int GC_unregister_disappearing_link (GC_PTR * ) ;
extern GC_PTR GC_make_closure (GC_finalization_proc fn, GC_PTR data) ;
extern void GC_debug_invoke_finalizer (GC_PTR obj, GC_PTR data) ;
extern int GC_invoke_finalizers (void) ;
typedef void (*GC_warn_proc) (char *msg, GC_word arg) ;
extern GC_warn_proc GC_set_warn_proc (GC_warn_proc p) ;
typedef GC_PTR (*GC_fn_type) (GC_PTR client_data) ;
extern GC_PTR GC_call_with_alloc_lock
(GC_fn_type fn, GC_PTR client_data) ;
extern GC_PTR GC_same_obj (GC_PTR p, GC_PTR q) ;
extern GC_PTR GC_pre_incr (GC_PTR *p, size_t how_much) ;
extern GC_PTR GC_post_incr (GC_PTR *p, size_t how_much) ;
extern GC_PTR GC_is_visible (GC_PTR p) ;
extern GC_PTR GC_is_valid_displacement (GC_PTR p) ;
extern void (*GC_same_obj_print_proc) (GC_PTR p, GC_PTR q) ;
extern void (*GC_is_valid_displacement_print_proc)
(GC_PTR p) ;
extern void (*GC_is_visible_print_proc)
(GC_PTR p) ;
int hash_string(Word);
typedef double Float;
union FloatWord {
Float f;
Word w;
};
Integer hash_float(Float);
extern void MR_dump_stack(Code *success_pointer, Word *det_stack_pointer,
Word *current_frame, char include_trace_data);
extern const char *MR_dump_stack_from_layout(FILE *fp,
const MR_Stack_Layout_Entry *entry_layout,
Word *det_stack_pointer, Word *current_frame,
char include_trace_data,
void (*print_stack_record)(FILE *,
const MR_Stack_Layout_Entry *,
int, int, Word *, Word *));
extern void MR_dump_nondet_stack_from_layout(FILE *fp, Word *base_maxfr);
extern const MR_Stack_Layout_Label *MR_find_nth_ancestor(
const MR_Stack_Layout_Label *label_layout,
int ancestor_level, Word **stack_trace_sp,
Word **stack_trace_curfr, const char **problem);
typedef enum {
STEP_ERROR_BEFORE,
STEP_ERROR_AFTER,
STEP_OK
} MR_Stack_Walk_Step_Result;
extern MR_Stack_Walk_Step_Result
MR_stack_walk_step(const MR_Stack_Layout_Entry *entry_layout,
const MR_Stack_Layout_Label **return_label_layout,
Word **stack_trace_sp_ptr, Word **stack_trace_curfr_ptr,
const char **problem_ptr);
Code *MR_stack_trace_bottom;
Word *MR_nondet_stack_trace_bottom;
extern const char * MR_detism_names[];
void MR_print_proc_id(FILE *fp, const MR_Stack_Layout_Entry *entry,
const char *extra, Word *base_sp, Word *base_curfr);
void MR_dump_stack_record_print(FILE *fp,
const MR_Stack_Layout_Entry *entry_layout, int count,
int start_level, Word *base_sp, Word *base_curfr);
extern void MR_schedule_agc(Code *pc_at_signal, Word *sp_at_signal);
struct MR_RootNode {
Word *root;
Word *type_info;
struct MR_RootNode* next;
};
typedef struct MR_RootNode *MR_RootList;
extern void MR_agc_add_root(Word *root_addr, Word *type_info);
extern Code * volatile MR_prof_current_proc;
extern void MR_prof_output_addr_decl(const char *name, const Code *address);
extern void MR_prof_init(void);
extern void MR_prof_finish(void);
typedef long jmp_buf[(35+1+48) ];
typedef long sigjmp_buf[(35+1+48) ];
extern void longjmp (jmp_buf, int) ;
extern int setjmp (jmp_buf) ;
extern int sigsetjmp (sigjmp_buf, int) ;
extern void siglongjmp (const sigjmp_buf, int) ;
extern int _setjmp (jmp_buf) ;
extern void _longjmp (jmp_buf, int) ;
extern char MR_debugflag[];
typedef struct {
jmp_buf *mercury_env;
jmp_buf env;
Word *saved_succip;
Word *saved_sp;
Word *saved_curfr;
Word *saved_maxfr;
Word regs[7 ];
} MR_jmp_buf;
typedef struct MR_mercury_engine_struct {
Word fake_reg[(11 + 1024 ) ];
MR_Context *this_context;
MR_Context context;
jmp_buf *e_jmp_buf;
} MercuryEngine;
extern MercuryEngine MR_engine_base;
extern MercuryEngine *create_engine(void);
extern void destroy_engine(MercuryEngine *engine);
extern void init_engine(MercuryEngine *engine);
extern void finalize_engine(MercuryEngine *engine);
extern void call_engine(Code *entry_point);
extern void terminate_engine(void);
extern void dump_prev_locations(void);
extern Code * do_redo (void) ;
extern Code * do_fail (void) ;
extern Code * do_reset_hp_fail (void) ;
extern Code * do_reset_framevar0_fail (void) ;
extern Code * do_succeed (void) ;
extern Code * do_not_reached (void) ;
typedef enum {
MR_PORT_CALL,
MR_PORT_EXIT,
MR_PORT_REDO,
MR_PORT_FAIL,
MR_PORT_THEN,
MR_PORT_ELSE,
MR_PORT_DISJ,
MR_PORT_SWITCH,
MR_PORT_PRAGMA_FIRST,
MR_PORT_PRAGMA_LATER,
MR_PORT_EXCEPTION
} MR_Trace_Port;
extern Code *MR_trace(const MR_Stack_Layout_Label *, MR_Trace_Port,
const char *, int);
extern Code *MR_trace_fake(const MR_Stack_Layout_Label *, MR_Trace_Port,
Unsigned, Unsigned, const char *, int);
extern void MR_trace_init(void);
extern void MR_trace_start(char enabled);
extern void MR_trace_end(void);
extern void MR_trace_final(void);
extern Unsigned MR_trace_call_seqno;
extern Unsigned MR_trace_call_depth;
typedef enum {
MR_TRACE_INTERNAL,
MR_TRACE_EXTERNAL
} MR_Trace_Type;
extern MR_Trace_Type MR_trace_handler;
extern char MR_trace_enabled;
extern Unsigned MR_trace_event_number;
extern Bool MR_trace_from_full;
extern void MR_trace_report(FILE *fp);
extern void MR_trace_report_raw(int fd);
extern void mercury_runtime_init(int argc, char **argv);
extern void mercury_runtime_main(void);
extern int mercury_runtime_terminate(void);
extern Code *program_entry_point;
extern void (*MR_library_initializer)(void);
extern void (*MR_library_finalizer)(void);
extern void (*MR_io_stderr_stream)(Word *);
extern void (*MR_io_stdout_stream)(Word *);
extern void (*MR_io_stdin_stream)(Word *);
extern void (*MR_io_print_to_cur_stream)(Word, Word);
extern void (*MR_io_print_to_stream)(Word, Word, Word);
extern void (*address_of_mercury_init_io)(void);
extern void (*address_of_init_modules)(void);
extern void (*address_of_init_gc)(void);
extern void (*MR_address_of_trace_init_external)(void);
extern void (*MR_address_of_trace_final_external)(void);
extern Code *MR_library_trace_browser;
extern Code *(*MR_trace_func_ptr)(const MR_Stack_Layout_Label *,
MR_Trace_Port, Unsigned, Unsigned, const char *, int);
extern void do_init_modules(void);
extern const char *progname;
extern int mercury_argc;
extern char **mercury_argv;
extern int mercury_exit_status;
extern size_t heap_size;
extern size_t detstack_size;
extern size_t nondstack_size;
extern size_t solutions_heap_size;
extern size_t trail_size;
extern size_t global_heap_size;
extern size_t debug_heap_size;
extern size_t heap_zone_size;
extern size_t detstack_zone_size;
extern size_t nondstack_zone_size;
extern size_t solutions_heap_zone_size;
extern size_t trail_zone_size;
extern size_t global_heap_zone_size;
extern size_t debug_heap_zone_size;
extern const char *MR_mdb_in_filename;
extern const char *MR_mdb_out_filename;
extern const char *MR_mdb_err_filename;
extern size_t pcache_size;
extern char check_space;
extern int time_at_start;
extern int time_at_last_stat;
enum MR_TimeProfileMethod {
MR_profile_real_time,
MR_profile_user_time,
MR_profile_user_plus_system_time
};
extern enum MR_TimeProfileMethod
MR_time_profile_method;
extern char MR_profiling;
typedef const Word *TypeLayoutField;
enum MR_TypeLayoutValue {
MR_TYPE_CTOR_LAYOUT_UNASSIGNED_VALUE,
MR_TYPE_CTOR_LAYOUT_UNUSED_VALUE,
MR_TYPE_CTOR_LAYOUT_STRING_VALUE,
MR_TYPE_CTOR_LAYOUT_FLOAT_VALUE,
MR_TYPE_CTOR_LAYOUT_INT_VALUE,
MR_TYPE_CTOR_LAYOUT_CHARACTER_VALUE,
MR_TYPE_CTOR_LAYOUT_UNIV_VALUE,
MR_TYPE_CTOR_LAYOUT_PREDICATE_VALUE,
MR_TYPE_CTOR_LAYOUT_VOID_VALUE,
MR_TYPE_CTOR_LAYOUT_ARRAY_VALUE,
MR_TYPE_CTOR_LAYOUT_TYPEINFO_VALUE,
MR_TYPE_CTOR_LAYOUT_C_POINTER_VALUE,
MR_TYPE_CTOR_LAYOUT_TYPECLASSINFO_VALUE
};
typedef struct {
int enum_or_comp_const;
Word num_sharers;
ConstString functor1;
} MR_TypeLayout_EnumVector;
typedef struct {
Word num_sharers;
Word simple_vector1;
} MR_TypeLayout_ComplicatedVector;
typedef struct {
int is_no_tag;
Word arg;
ConstString name;
} MR_TypeLayout_NoTagVector;
typedef struct {
int is_no_tag;
Word equiv_type;
} MR_TypeLayout_EquivVector;
Word * MR_create_type_info(Word *, Word *);
int MR_compare_type_info(Word, Word);
Word MR_collapse_equivalences(Word);
struct MR_MemoryCellNode {
void *data;
struct MR_MemoryCellNode *next;
};
typedef struct MR_MemoryCellNode *MR_MemoryList;
Word * MR_make_type_info(const Word *term_type_info,
const Word *arg_pseudo_type_info, MR_MemoryList *allocated);
void MR_deallocate(MR_MemoryList allocated_memory_cells);
enum MR_DataRepresentation {
MR_DATAREP_ENUM,
MR_DATAREP_COMPLICATED_CONST,
MR_DATAREP_COMPLICATED,
MR_DATAREP_SIMPLE,
MR_DATAREP_NOTAG,
MR_DATAREP_EQUIV,
MR_DATAREP_EQUIV_VAR,
MR_DATAREP_INT,
MR_DATAREP_CHAR,
MR_DATAREP_FLOAT,
MR_DATAREP_STRING,
MR_DATAREP_PRED,
MR_DATAREP_UNIV,
MR_DATAREP_VOID,
MR_DATAREP_ARRAY,
MR_DATAREP_TYPEINFO,
MR_DATAREP_C_POINTER,
MR_DATAREP_UNKNOWN,
MR_DATAREP_TYPECLASSINFO
};
enum MR_DataRepresentation MR_categorize_data(Word functors_indicator,
Word layout_entry);
extern void printdetstack(const Word *s);
extern void MR_printdetstackptr(const Word *s);
extern void MR_print_detstackptr(FILE *fp, const Word *s);
extern void printnondstack(const Word *s);
extern void MR_printnondstackptr(const Word *s);
extern void MR_print_nondstackptr(FILE *fp, const Word *s);
extern void printlabel( Code *w);
extern void MR_warning(const char *msg, ...);
extern void fatal_error(const char *msg, ...) __attribute__((noreturn)) ;
extern void MR_memcpy(void *dest, const void *src, size_t nbytes);
typedef Word **TrieNode;
typedef Word **AnswerBlock;
TrieNode MR_int_hash_lookup_or_add(TrieNode Table, Integer Key);
TrieNode MR_float_hash_lookup_or_add(TrieNode Table, Float Key);
TrieNode MR_string_hash_lookup_or_add(TrieNode Table, String Key);
TrieNode MR_type_info_lookup_or_add(TrieNode, Word *);
TrieNode MR_int_index_lookup_or_add(TrieNode table, Integer range, Integer key);
TrieNode MR_table_type(TrieNode Table, Word *type_info, Word data_value);
extern const char MR_grade_v1_register_gc_tags3_ubf ;
static Code * mercury__query__IntroducedFrom__pred__run__15__2_3_0 (void) ;
static Code * mercury__query__IntroducedFrom__pred__run__15__2_3_0_i2 (void) ;
static Code * mercury__query__IntroducedFrom__pred__run__15__2_3_0_i3 (void) ;
static Code * mercury__query__IntroducedFrom__pred__run__15__2_3_0_i4 (void) ;
static Code * mercury__query__IntroducedFrom__pred__run__15__2_3_0_i5 (void) ;
static Code * mercury__query__IntroducedFrom__pred__run__15__2_3_0_i6 (void) ;
static Code * mercury__query__IntroducedFrom__pred__run__15__2_3_0_i7 (void) ;
static Code * mercury__query__IntroducedFrom__pred__run__14__1_1_0 (void) ;
static Code * mercury__query__IntroducedFrom__pred__run__14__1_1_0_i1 (void) ;
Code * mercury__query__run_2_0 (void) ;
static Code * mercury__query__run_2_0_i2 (void) ;
static Code * mercury__query__run_2_0_i3 (void) ;
static Code * mercury____Unify___query__res_2_0 (void) ;
static Code * mercury____Unify___query__res_2_0_i2 (void) ;
static Code * mercury____Unify___query__res_2_0_i4 (void) ;
static Code * mercury____Unify___query__res_2_0_i1 (void) ;
static Code * mercury____Index___query__res_2_0 (void) ;
static Code * mercury____Compare___query__res_2_0 (void) ;
static Code * mercury____Compare___query__res_2_0_i3 (void) ;
static Code * mercury____Compare___query__res_2_0_i7 (void) ;
static Code * mercury__query__query_2_0 (void) ;
const struct mercury_data_query__type_ctor_info_res_2_struct {
Integer f1;
Code * f2;
Code * f3;
Code * f4;
Word * f5;
Word * f6;
Word * f7;
Word * f8;
} mercury_data_query__type_ctor_info_res_2;
static const struct mercury_data_query__common_0_struct {
Word * f1;
Word * f2;
} mercury_data_query__common_0;
static const struct mercury_data_query__common_1_struct {
Word * f1;
Word * f2;
Word * f3;
} mercury_data_query__common_1;
static const struct mercury_data_query__common_2_struct {
Integer f1;
Code * f2;
} mercury_data_query__common_2;
static const struct mercury_data_query__common_3_struct {
Integer f1;
Code * f2;
} mercury_data_query__common_3;
static const struct mercury_data_query__common_4_struct {
Integer f1;
Word * f2;
} mercury_data_query__common_4;
static const struct mercury_data_query__common_5_struct {
Integer f1;
Word * f2;
} mercury_data_query__common_5;
static const struct mercury_data_query__common_6_struct {
Integer f1;
Word * f2;
} mercury_data_query__common_6;
static const struct mercury_data_query__common_7_struct {
Integer f1;
Integer f2;
Integer f3;
Word * f4;
Word * f5;
} mercury_data_query__common_7;
static const struct mercury_data_query__type_ctor_functors_res_2_struct {
Integer f1;
Integer f2;
Word * f3;
} mercury_data_query__type_ctor_functors_res_2;
static const struct mercury_data_query__type_ctor_layout_res_2_struct {
Word * f1;
Word * f2;
Word * f3;
Word * f4;
Word * f5;
Word * f6;
Word * f7;
Word * f8;
} mercury_data_query__type_ctor_layout_res_2;
const struct mercury_data_query__type_ctor_info_res_2_struct mercury_data_query__type_ctor_info_res_2 = {
(Integer) 2,
((Code *) ( mercury____Unify___query__res_2_0 )) ,
((Code *) ( mercury____Index___query__res_2_0 )) ,
((Code *) ( mercury____Compare___query__res_2_0 )) ,
(Word *) &mercury_data_query__type_ctor_layout_res_2,
(Word *) &mercury_data_query__type_ctor_functors_res_2,
((Word *) "query" ) ,
((Word *) "res" )
};
extern const struct mercury_data_list__type_ctor_info_list_1_struct
mercury_data_list__type_ctor_info_list_1;
extern const struct mercury_data___type_ctor_info_character_0_struct
mercury_data___type_ctor_info_character_0;
static const struct mercury_data_query__common_0_struct mercury_data_query__common_0 = {
(Word *) &mercury_data_list__type_ctor_info_list_1,
(Word *) &mercury_data___type_ctor_info_character_0
};
static const struct mercury_data_query__common_1_struct mercury_data_query__common_1 = {
(Word *) &mercury_data_query__type_ctor_info_res_2,
((Word *)((char *)( (Word *) &mercury_data_query__common_0 ) + ( ( 0 ) ))) ,
((Word *)((char *)( (Word *) &mercury_data_query__common_0 ) + ( ( 0 ) )))
};
static const struct mercury_data_query__common_2_struct mercury_data_query__common_2 = {
(Integer) 0,
((Code *) ( mercury__query__IntroducedFrom__pred__run__14__1_1_0 ))
};
static const struct mercury_data_query__common_3_struct mercury_data_query__common_3 = {
(Integer) 0,
((Code *) ( mercury__query__IntroducedFrom__pred__run__15__2_3_0 ))
};
static const struct mercury_data_query__common_4_struct mercury_data_query__common_4 = {
(Integer) 99,
((Word *)((char *)( (Word *) (( (Integer) 0 ) << 3 ) ) + ( ( 0 ) )))
};
static const struct mercury_data_query__common_5_struct mercury_data_query__common_5 = {
(Integer) 98,
((Word *)((char *)( (Word *) &mercury_data_query__common_4 ) + ( ( 1 ) )))
};
static const struct mercury_data_query__common_6_struct mercury_data_query__common_6 = {
(Integer) 97,
((Word *)((char *)( (Word *) &mercury_data_query__common_5 ) + ( ( 1 ) )))
};
static const struct mercury_data_query__common_7_struct mercury_data_query__common_7 = {
(Integer) 2,
(Integer) 1,
(Integer) 2,
((Word *) "res" ) ,
((Word *)((char *)( (Word *) (( (Integer) 0 ) << 3 ) ) + ( ( 0 ) )))
};
static const struct mercury_data_query__type_ctor_functors_res_2_struct mercury_data_query__type_ctor_functors_res_2 = {
(Integer) 0,
(Integer) 1,
((Word *)((char *)( (Word *) &mercury_data_query__common_7 ) + ( ( 0 ) )))
};
static const struct mercury_data_query__type_ctor_layout_res_2_struct mercury_data_query__type_ctor_layout_res_2 = {
((Word *)((char *)( (Word *) &mercury_data_query__common_7 ) + ( ( 1 ) ))) ,
((Word *)((char *)( (Word *) (( (Integer) 1 ) << 3 ) ) + ( ( 0 ) ))) ,
((Word *)((char *)( (Word *) (( (Integer) 1 ) << 3 ) ) + ( ( 0 ) ))) ,
((Word *)((char *)( (Word *) (( (Integer) 1 ) << 3 ) ) + ( ( 0 ) ))) ,
((Word *)((char *)( (Word *) (( (Integer) 1 ) << 3 ) ) + ( ( 0 ) ))) ,
((Word *)((char *)( (Word *) (( (Integer) 1 ) << 3 ) ) + ( ( 0 ) ))) ,
((Word *)((char *)( (Word *) (( (Integer) 1 ) << 3 ) ) + ( ( 0 ) ))) ,
((Word *)((char *)( (Word *) (( (Integer) 1 ) << 3 ) ) + ( ( 0 ) )))
};
extern Code * mercury__io__write_string_3_0 (void) ;
extern Code * mercury__io__write_3_0 (void) ;
static Code* query_module0 (void); static Code* query_module0 (void) {
;
;
;
;
;
;
;
return 0;
return ( ((Code *) ( mercury__query__IntroducedFrom__pred__run__15__2_3_0 )) ) ; } static Code* mercury__query__IntroducedFrom__pred__run__15__2_3_0 (void) { ;
( ((void)0) , ((void)0) , (( Word * )( ( mr0 ) )) = (( Word * )( ( mr0 ) )) + ( 3 ), ((void)0) , (void)0 ) ;
(( (( Word * )( ( mr0 ) )) )[-( 3 )]) = (Word) (( Code * )( ( mr1 ) )) ;
(( (( Word * )( ( mr0 ) )) )[-( 1 )]) = ((const Word *) (( ( ( mr2 ) ) ) - ( ( ( 0 ) ) )) )[ (Integer) 0 ] ;
(( (( Word * )( ( mr0 ) )) )[-( 2 )]) = ((const Word *) (( ( ( mr2 ) ) ) - ( ( ( 0 ) ) )) )[ (Integer) 1 ] ;
( mr4 ) = ( mr2 ) ;
( mr2 ) = (Word) ((Word *) "X = " ) ;
do { ((void)0) ; do { ((void)0) ; (( Code * )( ( mr1 ) )) = ( ((Code *) ( mercury__query__IntroducedFrom__pred__run__15__2_3_0_i2 )) ); ((void)0) ; return ( ( ((Code *) ( mercury__io__write_string_3_0 )) ) ) ; } while (0) ; } while (0) ;
return ( ((Code *) ( mercury__query__IntroducedFrom__pred__run__15__2_3_0_i2 )) ) ; } static Code* mercury__query__IntroducedFrom__pred__run__15__2_3_0_i2 (void) { ;
((void)0) ;
( mr3 ) = ( mr2 ) ;
( mr2 ) = (Word) ((Word *)((char *)( (Word *) &mercury_data_query__common_0 ) + ( ( 0 ) ))) ;
( mr4 ) = ( mr3 ) ;
( mr3 ) = (( (( Word * )( ( mr0 ) )) )[-( 1 )]) ;
do { ((void)0) ; do { ((void)0) ; (( Code * )( ( mr1 ) )) = ( ((Code *) ( mercury__query__IntroducedFrom__pred__run__15__2_3_0_i3 )) ); ((void)0) ; return ( ( ((Code *) ( mercury__io__write_3_0 )) ) ) ; } while (0) ; } while (0) ;
return ( ((Code *) ( mercury__query__IntroducedFrom__pred__run__15__2_3_0_i3 )) ) ; } static Code* mercury__query__IntroducedFrom__pred__run__15__2_3_0_i3 (void) { ;
((void)0) ;
( mr3 ) = ( mr2 ) ;
( mr2 ) = (Word) ((Word *) ", " ) ;
do { ((void)0) ; do { ((void)0) ; (( Code * )( ( mr1 ) )) = ( ((Code *) ( mercury__query__IntroducedFrom__pred__run__15__2_3_0_i4 )) ); ((void)0) ; return ( ( ((Code *) ( mercury__io__write_string_3_0 )) ) ) ; } while (0) ; } while (0) ;
return ( ((Code *) ( mercury__query__IntroducedFrom__pred__run__15__2_3_0_i4 )) ) ; } static Code* mercury__query__IntroducedFrom__pred__run__15__2_3_0_i4 (void) { ;
((void)0) ;
( mr3 ) = ( mr2 ) ;
( mr2 ) = (Word) ((Word *) "Y = " ) ;
do { ((void)0) ; do { ((void)0) ; (( Code * )( ( mr1 ) )) = ( ((Code *) ( mercury__query__IntroducedFrom__pred__run__15__2_3_0_i5 )) ); ((void)0) ; return ( ( ((Code *) ( mercury__io__write_string_3_0 )) ) ) ; } while (0) ; } while (0) ;
return ( ((Code *) ( mercury__query__IntroducedFrom__pred__run__15__2_3_0_i5 )) ) ; } static Code* mercury__query__IntroducedFrom__pred__run__15__2_3_0_i5 (void) { ;
((void)0) ;
( mr3 ) = ( mr2 ) ;
( mr2 ) = (Word) ((Word *)((char *)( (Word *) &mercury_data_query__common_0 ) + ( ( 0 ) ))) ;
( mr4 ) = ( mr3 ) ;
( mr3 ) = (( (( Word * )( ( mr0 ) )) )[-( 2 )]) ;
do { ((void)0) ; do { ((void)0) ; (( Code * )( ( mr1 ) )) = ( ((Code *) ( mercury__query__IntroducedFrom__pred__run__15__2_3_0_i6 )) ); ((void)0) ; return ( ( ((Code *) ( mercury__io__write_3_0 )) ) ) ; } while (0) ; } while (0) ;
return ( ((Code *) ( mercury__query__IntroducedFrom__pred__run__15__2_3_0_i6 )) ) ; } static Code* mercury__query__IntroducedFrom__pred__run__15__2_3_0_i6 (void) { ;
((void)0) ;
( mr3 ) = ( mr2 ) ;
( mr2 ) = (Word) ((Word *) ", " ) ;
do { ((void)0) ; do { ((void)0) ; (( Code * )( ( mr1 ) )) = ( ((Code *) ( mercury__query__IntroducedFrom__pred__run__15__2_3_0_i7 )) ); ((void)0) ; return ( ( ((Code *) ( mercury__io__write_string_3_0 )) ) ) ; } while (0) ; } while (0) ;
return ( ((Code *) ( mercury__query__IntroducedFrom__pred__run__15__2_3_0_i7 )) ) ; } static Code* mercury__query__IntroducedFrom__pred__run__15__2_3_0_i7 (void) { ;
((void)0) ;
( mr3 ) = ( mr2 ) ;
( mr2 ) = (Word) ((Word *) "true ;\n" ) ;
(( Code * )( ( mr1 ) )) = (Code *) (( (( Word * )( ( mr0 ) )) )[-( 3 )]) ;
( ((void)0) , ((void)0) , (( Word * )( ( mr0 ) )) = (( Word * )( ( mr0 ) )) - ( 3 ), ((void)0) , (void)0 ) ;
do { ((void)0) ; ((void)0) ; ((void)0) ; return ( ((Code *) ( mercury__io__write_string_3_0 )) ) ; } while (0) ;
}
extern Code * do_fail (void) ;
static Code* query_module1 (void); static Code* query_module1 (void) {
;
;
return 0;
return ( ((Code *) ( mercury__query__IntroducedFrom__pred__run__14__1_1_0 )) ) ; } static Code* mercury__query__IntroducedFrom__pred__run__14__1_1_0 (void) { ;
do { register Word *prevfr; register Word *succfr; prevfr = (( Word * )( ( ((MR_engine_base. fake_reg ) ) [9] ) )) ; succfr = (( Word * )( ( ((MR_engine_base. fake_reg ) ) [8] ) )) ; (( Word * )( ( ((MR_engine_base. fake_reg ) ) [9] ) )) += (5 + 0 ); (( Word * )( ( ((MR_engine_base. fake_reg ) ) [8] ) )) = (( Word * )( ( ((MR_engine_base. fake_reg ) ) [9] ) )) ; (( Code * )( ((Word *) ( (( Word * )( ( ((MR_engine_base. fake_reg ) ) [8] ) )) ))[(-1) ] )) = ((Code *) ( do_fail )) ; (( Word * )( ((Word *) ( (( Word * )( ( ((MR_engine_base. fake_reg ) ) [8] ) )) ))[(-0) ] )) = prevfr; (( Code * )( ((Word *) ( (( Word * )( ( ((MR_engine_base. fake_reg ) ) [8] ) )) ))[(-3) ] )) = (( Code * )( ( mr1 ) )) ; (( Word * )( ((Word *) ( (( Word * )( ( ((MR_engine_base. fake_reg ) ) [8] ) )) ))[(-4) ] )) = succfr; (( Word * )( ((Word *) ( (( Word * )( ( ((MR_engine_base. fake_reg ) ) [8] ) )) ))[(-2) ] )) =!
!
!
(( Word * )( ( ((MR_engine_base. fake_reg ) ) [8] ) )) ; ; ((void)0) ; ((void)0) ; } while (0) ;
do { ((void)0) ; do { ((void)0) ; (( Code * )( ( mr1 ) )) = ( ((Code *) ( mercury__query__IntroducedFrom__pred__run__14__1_1_0_i1 )) ); ((void)0) ; return ( ( ((Code *) ( mercury__query__query_2_0 )) ) ) ; } while (0) ; } while (0) ;
return ( ((Code *) ( mercury__query__IntroducedFrom__pred__run__14__1_1_0_i1 )) ) ; } static Code* mercury__query__IntroducedFrom__pred__run__14__1_1_0_i1 (void) { ;
((void)0) ;
( mr4 ) = ( mr2 ) ;
(( ( ( ( mr2 ) ) ) ) = (Word) ((Word *)((char *)( (Word) GC_malloc( ( ( ( (Integer) 2 ) ) ) * sizeof(Word) ) ) + ( ( ( ( ( 0 ) ) ) ) ))) ) ;
((Word *) (( ( ( mr2 ) ) ) - ( ( ( 0 ) ) )) )[ (Integer) 0 ] = ( mr4 ) ;
((Word *) (( ( ( mr2 ) ) ) - ( ( ( 0 ) ) )) )[ (Integer) 1 ] = ( mr3 ) ;
do { register Word *childfr; ((void)0) ; childfr = (( Word * )( ( ((MR_engine_base. fake_reg ) ) [8] ) )) ; (( Word * )( ( ((MR_engine_base. fake_reg ) ) [8] ) )) = (( Word * )( ((Word *) ( childfr ))[(-4) ] )) ; return ( (( Code * )( ((Word *) ( childfr ))[(-3) ] )) ) ; } while (0) ;
}