Commit 7c3ac422 by Zack Weinberg

re PR target/14887 (compat/struct-ret-19 failure on ia64-hpux - argument passing bug)

	PR 14887
	* config/ia64/hpux.h (MEMBER_TYPE_FORCES_BLK): Look only at
	mode argument.
	* config/ia64/ia64.c (ia64_hpux_file_end): Check
	TREE_SYMBOL_REFERENCED on DECL_ASSEMBLER_NAME, not DECL_NAME.

From-SVN: r80571
parent 0b24db88
2004-04-09 Zack Weinberg <zack@codesourcery.com>
PR 14887
* config/ia64/hpux.h (MEMBER_TYPE_FORCES_BLK): Look only at
mode argument.
* config/ia64/ia64.c (ia64_hpux_file_end): Check
TREE_SYMBOL_REFERENCED on DECL_ASSEMBLER_NAME, not DECL_NAME.
2004-04-09 Roger Sayle <roger@eyesopen.com> 2004-04-09 Roger Sayle <roger@eyesopen.com>
* simplify-rtx.c (mode_signbit_p): New function to check whether * simplify-rtx.c (mode_signbit_p): New function to check whether
...@@ -23,13 +31,13 @@ ...@@ -23,13 +31,13 @@
2004-04-09 Caroline Tice <ctice@apple.com> 2004-04-09 Caroline Tice <ctice@apple.com>
* basic-block.h (struct edge_def): Add new field, crossing_edge. * basic-block.h (struct edge_def): Add new field, crossing_edge.
(struct basic_block_def): Add new field, partition. (struct basic_block_def): Add new field, partition.
(UNPARTITIONED, HOT_PARTITION, COLD_PARTITION): New constant macro (UNPARTITIONED, HOT_PARTITION, COLD_PARTITION): New constant macro
definitions. definitions.
(partition_hot_cold_basic_blocks): Add extern function (partition_hot_cold_basic_blocks): Add extern function
declaration. declaration.
* bb-reorder.c (function.h, obstack.h, expr.h, regs.h): Add four new * bb-reorder.c (function.h, obstack.h, expr.h, regs.h): Add four new
include statements. include statements.
(N_ROUNDS): Increase the maximum number of rounds by 1. (N_ROUNDS): Increase the maximum number of rounds by 1.
(branch_threshold): Add array value for new round. (branch_threshold): Add array value for new round.
...@@ -50,19 +58,19 @@ ...@@ -50,19 +58,19 @@
basic blocks. basic blocks.
(find_traces_1_round): Add a parameter. Modify to push all cold blocks, (find_traces_1_round): Add a parameter. Modify to push all cold blocks,
and only cold blocks, into the last (extra) round of collecting traces. and only cold blocks, into the last (extra) round of collecting traces.
(better_edge_p): Add a parameter. Modify to favor non-crossing edges (better_edge_p): Add a parameter. Modify to favor non-crossing edges
over crossing edges. over crossing edges.
(bb_to_key): Add code to correctly identify cold blocks when (bb_to_key): Add code to correctly identify cold blocks when
doing partitioning. doing partitioning.
(connect_traces): Modify to connect all the non-cold traces first, then (connect_traces): Modify to connect all the non-cold traces first, then
go back and connect up all the cold traces. go back and connect up all the cold traces.
(reorder_basic_blocks): Add call to add_unlikely_executed_notes. (reorder_basic_blocks): Add call to add_unlikely_executed_notes.
* cfg.c (entry_exit_blocks): Add initialization for partition field in * cfg.c (entry_exit_blocks): Add initialization for partition field in
entry and exit blocks. entry and exit blocks.
* cfgbuild.c (make_edges): Update current_function_has_computed_jump * cfgbuild.c (make_edges): Update current_function_has_computed_jump
if we are doing hot/cold partitioning. if we are doing hot/cold partitioning.
* cfgcleanup.c (cfglayout.h): Add new include statement. * cfgcleanup.c (cfglayout.h): Add new include statement.
(try_simplify_condjump): Modify to not attempt on blocks with jumps (try_simplify_condjump): Modify to not attempt on blocks with jumps
that cross section boundaries. that cross section boundaries.
(try_forward_edges): Likewise. (try_forward_edges): Likewise.
(merge_blocks_move_predecessor_nojumps): Likewise. (merge_blocks_move_predecessor_nojumps): Likewise.
...@@ -75,15 +83,15 @@ ...@@ -75,15 +83,15 @@
(try_optimize_cfg): Likewise. (try_optimize_cfg): Likewise.
* cfghooks.c (tidy_fallthru_edges): Modify to not remove indirect * cfghooks.c (tidy_fallthru_edges): Modify to not remove indirect
jumps that cross section boundaries. jumps that cross section boundaries.
* cfglayout.c (flags.h): Add new include statement. * cfglayout.c (flags.h): Add new include statement.
(update_unlikely_executed_notes): New function. (update_unlikely_executed_notes): New function.
(fixup_reorder_chain): Add code so when a new jumping basic block is (fixup_reorder_chain): Add code so when a new jumping basic block is
added, it's UNLIKELY_EXECUTED_CODE and REG_CROSSING_JUMP notes are added, it's UNLIKELY_EXECUTED_CODE and REG_CROSSING_JUMP notes are
updated appropriately. updated appropriately.
(duplicate_insn_chain): Add code to duplicate the new NOTE insn (duplicate_insn_chain): Add code to duplicate the new NOTE insn
introduced by this optimization. introduced by this optimization.
* cfglayout.h (scan_ahead_for_unlikely_executed_note): Add new * cfglayout.h (scan_ahead_for_unlikely_executed_note): Add new
extern function declaration. extern function declaration.
* cfgrtl.c (can_delete_note_p): Add NOTE_INSN_UNLIKELY_EXECUTED_CODE to * cfgrtl.c (can_delete_note_p): Add NOTE_INSN_UNLIKELY_EXECUTED_CODE to
list of notes that can be deleted. list of notes that can be deleted.
(create_basic_block_structure): Add initialization for partition field. (create_basic_block_structure): Add initialization for partition field.
...@@ -92,7 +100,7 @@ ...@@ -92,7 +100,7 @@
(try_redirect_by_replacing_jump): Modify to not attempt on jumps that (try_redirect_by_replacing_jump): Modify to not attempt on jumps that
cross section boundaries. cross section boundaries.
(commit_one_edge_insertion): Add code so newly created basic block (commit_one_edge_insertion): Add code so newly created basic block
ends up in correct (hot or cold) section. Modify to disallow ends up in correct (hot or cold) section. Modify to disallow
insertions before NOTE_INSN_UNLIKELY_EXECUTED_CODE notes. insertions before NOTE_INSN_UNLIKELY_EXECUTED_CODE notes.
(rtl_verify_flow_info_1): Add code to verify that no fall_thru edge (rtl_verify_flow_info_1): Add code to verify that no fall_thru edge
crosses section boundaries. crosses section boundaries.
...@@ -100,97 +108,97 @@ ...@@ -100,97 +108,97 @@
cross section boundaries. cross section boundaries.
(force_nonfallthru_and_redirect): Modify to make sure new basic block (force_nonfallthru_and_redirect): Modify to make sure new basic block
ends up in correct section, with correct notes attached. ends up in correct section, with correct notes attached.
* common.opt (freorder-blocks-and-partition): Add new flag for this * common.opt (freorder-blocks-and-partition): Add new flag for this
optimization. optimization.
* dbxout.c (dbx_function_end): Add code to make sure scope labels at * dbxout.c (dbx_function_end): Add code to make sure scope labels at
the end of functions are written into the correct (hot or cold) the end of functions are written into the correct (hot or cold)
section. section.
(dbx_source_file): Add code so writing debug file information (dbx_source_file): Add code so writing debug file information
doesn't incorrectly change sections. doesn't incorrectly change sections.
* defaults.h (NORMAL_TEXT_SECTION_NAME): New constant macro, for use * defaults.h (NORMAL_TEXT_SECTION_NAME): New constant macro, for use
in partitioning hot/cold basic blocks into separate sections. in partitioning hot/cold basic blocks into separate sections.
(SECTION_FORMAT_STRING): New constant macro, for linux/i386 hot/cold (SECTION_FORMAT_STRING): New constant macro, for linux/i386 hot/cold
section partitioning. section partitioning.
(HAS_LONG_COND_BRANCH): New constant macro, indicating whether or not (HAS_LONG_COND_BRANCH): New constant macro, indicating whether or not
conditional branches can span all of memory. conditional branches can span all of memory.
(HAS_LONG_UNCOND_BRANCH): New constant macro, indicationg whether or not (HAS_LONG_UNCOND_BRANCH): New constant macro, indicationg whether or not
unconditional branches can span all of memory. unconditional branches can span all of memory.
* final.c (scan_ahead_for_unlikely_executed_note): New function. * final.c (scan_ahead_for_unlikely_executed_note): New function.
(final_scan_insn): Add code to check for NOTE instruction indicating (final_scan_insn): Add code to check for NOTE instruction indicating
whether basic block belongs in hot or cold section, and to make sure whether basic block belongs in hot or cold section, and to make sure
the current basic block is being written to the appropriate section. the current basic block is being written to the appropriate section.
Also added code to ensure that jump table basic blocks end up in the Also added code to ensure that jump table basic blocks end up in the
correct section. correct section.
* flags.h (flag_reorder_blocks_and_partition): New flag. * flags.h (flag_reorder_blocks_and_partition): New flag.
* ifcvt.c (find_if_case_1): Modify to not attempt if conversion if * ifcvt.c (find_if_case_1): Modify to not attempt if conversion if
one of the branches has a jump that crosses between sections. one of the branches has a jump that crosses between sections.
(find_if_case_2): Likewise. (find_if_case_2): Likewise.
(ifcvt): Modify to not attempt to mark loop exit edges after (ifcvt): Modify to not attempt to mark loop exit edges after
hot/cold partitioning has occurred. hot/cold partitioning has occurred.
* opts.c (decode_options): Code to handle new flag, * opts.c (decode_options): Code to handle new flag,
flag_reorder_blocks_and_partition; also to turn it off if flag_reorder_blocks_and_partition; also to turn it off if
flag_exceptions is on. flag_exceptions is on.
(common_handle_option): Code to handle new flag, (common_handle_option): Code to handle new flag,
flag_reorder_blocks_and_partition. flag_reorder_blocks_and_partition.
* output.h (unlikely_text_section): New extern function declaration. * output.h (unlikely_text_section): New extern function declaration.
(in_unlikely_text_section): New extern function declaration. (in_unlikely_text_section): New extern function declaration.
* passes.c (rest_of_handle_stack_regs): Add * passes.c (rest_of_handle_stack_regs): Add
flag_reorder_blocks_and_partition as an 'or' condition for calling flag_reorder_blocks_and_partition as an 'or' condition for calling
reorder_basic_blocks. reorder_basic_blocks.
(rest_of_handle_reorder_blocks): Add flag_reorder_blocks_and_partition (rest_of_handle_reorder_blocks): Add flag_reorder_blocks_and_partition
as an 'or' condition for calling reorder_basic_blocks. as an 'or' condition for calling reorder_basic_blocks.
(rest_of_compilation): Add call to partition_hot_cold_basic_blocks. (rest_of_compilation): Add call to partition_hot_cold_basic_blocks.
* print-rtl.c (print_rtx): Add code for handling new note, * print-rtl.c (print_rtx): Add code for handling new note,
NOTE_INSN_UNLIKELY_EXECUTED_CODE NOTE_INSN_UNLIKELY_EXECUTED_CODE
* rtl.c (NOTE_INSN_UNLIKELY_EXECUTED_CODE): New note insn (see below). * rtl.c (NOTE_INSN_UNLIKELY_EXECUTED_CODE): New note insn (see below).
(REG_CROSSING_JUMP): New kind of reg_note, to mark jumps that (REG_CROSSING_JUMP): New kind of reg_note, to mark jumps that
cross between section boundaries. cross between section boundaries.
* rtl.h (NOTE_INSN_UNLIKELY_EXECUTED_CODE): New note instruction, * rtl.h (NOTE_INSN_UNLIKELY_EXECUTED_CODE): New note instruction,
indicating the basic block containing it belongs in the cold section. indicating the basic block containing it belongs in the cold section.
(REG_CROSSING_JUMP): New type of reg_note, to mark jumps that cross (REG_CROSSING_JUMP): New type of reg_note, to mark jumps that cross
between hot and cold sections. between hot and cold sections.
* toplev.c (flag_reorder_blocks_and_partition): Add code to * toplev.c (flag_reorder_blocks_and_partition): Add code to
initialize this flag, and to tie it to the command-line option initialize this flag, and to tie it to the command-line option
freorder-blocks-and-partition. freorder-blocks-and-partition.
* varasm.c (cfglayout.h): Add new include statement. * varasm.c (cfglayout.h): Add new include statement.
(unlikely_section_label_printed): New global variable, used for (unlikely_section_label_printed): New global variable, used for
determining when to output section name labels for cold sections. determining when to output section name labels for cold sections.
(in_section): Add in_unlikely_executed_text to enum data structure. (in_section): Add in_unlikely_executed_text to enum data structure.
(text_section): Modify code to use SECTION_FORMAT_STRING and (text_section): Modify code to use SECTION_FORMAT_STRING and
NORMAL_TEXT_SECTION_NAME macros. NORMAL_TEXT_SECTION_NAME macros.
(unlikely_text_section): New function. (unlikely_text_section): New function.
(in_unlikely_text_section): New function. (in_unlikely_text_section): New function.
(function_section): Add code to make sure beginning of function is (function_section): Add code to make sure beginning of function is
written into correct section (hot or cold). written into correct section (hot or cold).
(assemble_start_function): Add code to make sure stuff is written to (assemble_start_function): Add code to make sure stuff is written to
the correct section. the correct section.
(assemble_zeros): Add in_unlikely_text_section as an 'or' condition (assemble_zeros): Add in_unlikely_text_section as an 'or' condition
to an if statement that was checking 'in_text_section'. to an if statement that was checking 'in_text_section'.
(assemble_variable): Add 'in_unlikely_text_section' as an 'or' (assemble_variable): Add 'in_unlikely_text_section' as an 'or'
condition to an if statement that was checking 'in_text_section'. condition to an if statement that was checking 'in_text_section'.
(default_section_type_flags_1): Add check: if in cold section (default_section_type_flags_1): Add check: if in cold section
flags = SECTION_CODE. flags = SECTION_CODE.
* config/darwin.c (darwin_asm_named_section): Modify to use * config/darwin.c (darwin_asm_named_section): Modify to use
SECTION_FORMAT_STRING if we are partitioning hot/cold blocks. SECTION_FORMAT_STRING if we are partitioning hot/cold blocks.
* config/i386/i386.h (HAS_LONG_COND_BRANCH): Defined this macro * config/i386/i386.h (HAS_LONG_COND_BRANCH): Defined this macro
specifically for the i386. specifically for the i386.
(HAS_LONG_UNCOND_BRANCH): Defined this macro specifically for the i386. (HAS_LONG_UNCOND_BRANCH): Defined this macro specifically for the i386.
* config/rs6000/darwin.h (UNLIKELY_EXECUTED_TEXT_SECTION_NAME): Change * config/rs6000/darwin.h (UNLIKELY_EXECUTED_TEXT_SECTION_NAME): Change
text string to something more informative. text string to something more informative.
(NORMAL_TEXT_SECTION_NAME): Add new definition. (NORMAL_TEXT_SECTION_NAME): Add new definition.
(SECTION_FORMAT_STRING): Add new definition. (SECTION_FORMAT_STRING): Add new definition.
* config/rs6000/rs6000.c (rs6000_assemble_integer): Add * config/rs6000/rs6000.c (rs6000_assemble_integer): Add
'!in_unlikely_text_section' as an 'and' condition to an if statement '!in_unlikely_text_section' as an 'and' condition to an if statement
that was already checking '!in_text_section'. that was already checking '!in_text_section'.
* config/rs6000/sysv4.h (HOT_TEXT_SECTION_NAME,NORMAL_TEXT_SECTION_NAME, * config/rs6000/sysv4.h (HOT_TEXT_SECTION_NAME,NORMAL_TEXT_SECTION_NAME,
UNLIKELY_EXECUTED_TEXT_SECTION_NAME,SECTION_FORMAT_STRING): Make UNLIKELY_EXECUTED_TEXT_SECTION_NAME,SECTION_FORMAT_STRING): Make
sure these are properly defined for linux on ppc. sure these are properly defined for linux on ppc.
* doc/invoke.texi (freorder-blocks-and-partition): Add documentation * doc/invoke.texi (freorder-blocks-and-partition): Add documentation
for this new flag. for this new flag.
* doc/rtl.texi (REG_CROSSING_JUMP): Add documentation for new * doc/rtl.texi (REG_CROSSING_JUMP): Add documentation for new
reg_note. reg_note.
* doc/tm.texi (NORMAL_TEXT_SECTION_NAME, SECTION_FORMAT_STRING, * doc/tm.texi (NORMAL_TEXT_SECTION_NAME, SECTION_FORMAT_STRING,
HAS_LONG_COND_BRANCH, HAS_LONG_UNCOND_BRANCH): Add documentation for HAS_LONG_COND_BRANCH, HAS_LONG_UNCOND_BRANCH): Add documentation for
these new macros. these new macros.
2004-04-08 Roger Sayle <roger@eyesopen.com> 2004-04-08 Roger Sayle <roger@eyesopen.com>
...@@ -319,7 +327,7 @@ ...@@ -319,7 +327,7 @@
* gcc.c (main): Move 'break' in main loops (on an error) * gcc.c (main): Move 'break' in main loops (on an error)
to wait until error processing has occurred. to wait until error processing has occurred.
2004-04-06 Nathanael Nerode <neroden@gcc.gnu.org> 2004-04-06 Nathanael Nerode <neroden@gcc.gnu.org>
* config.gcc: Stop changing enable_threads midstream. * config.gcc: Stop changing enable_threads midstream.
...@@ -366,7 +374,7 @@ ...@@ -366,7 +374,7 @@
PR 14467 PR 14467
* config/darwin.h (LINK_COMMAND_SPEC): Use c++filt instead of c++filt3. * config/darwin.h (LINK_COMMAND_SPEC): Use c++filt instead of c++filt3.
2004-04-06 John David Anglin <dave.anglin@nrc-cnrc.gc.ca> 2004-04-06 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
* doc/install.texi: Update HP-UX 11 installation procedure. * doc/install.texi: Update HP-UX 11 installation procedure.
...@@ -392,8 +400,8 @@ ...@@ -392,8 +400,8 @@
* gcc.c (combine_flag): New global variable, for new driver option. * gcc.c (combine_flag): New global variable, for new driver option.
(struct compiler): Add two new fields, to be used when (struct compiler): Add two new fields, to be used when
combining multiple input files in a single pass (IMA). combining multiple input files in a single pass (IMA).
(default_compilers): Add values for the new fields to all (default_compilers): Add values for the new fields to all
compiler entries. Modify the "@c" compiler entry for doing IMA compiler entries. Modify the "@c" compiler entry for doing IMA
properly with "-save-temps" and the "combine" flag. properly with "-save-temps" and the "combine" flag.
(option_map): Add new driver option, "--combine", to tell driver (option_map): Add new driver option, "--combine", to tell driver
to pass multiple input files to compiler at one time. to pass multiple input files to compiler at one time.
...@@ -405,8 +413,8 @@ ...@@ -405,8 +413,8 @@
for new "combine" option; remove assignment to combine_inputs. for new "combine" option; remove assignment to combine_inputs.
(do_spec_1): Modify to deal with IMA better. (do_spec_1): Modify to deal with IMA better.
(main): Make variable 'lang_n_infiles' local to entire function (main): Make variable 'lang_n_infiles' local to entire function
rather than to a single block. Use flag combine_flag to rather than to a single block. Use flag combine_flag to
determine whether to do IMA or not; Modify loop initializing determine whether to do IMA or not; Modify loop initializing
infiles to deal properly with linker files. infiles to deal properly with linker files.
Add code for doing preprocessing in presence of Add code for doing preprocessing in presence of
IMA with "-save-temps" flag. Modify "main" loop to handle IMA with "-save-temps" flag. Modify "main" loop to handle
...@@ -414,7 +422,7 @@ ...@@ -414,7 +422,7 @@
preprocessing, gracefully. preprocessing, gracefully.
* toplev.c (set_src_pwd): Modify to not complain if attempting to * toplev.c (set_src_pwd): Modify to not complain if attempting to
re-set it to same directory it's previously been set to (avoid re-set it to same directory it's previously been set to (avoid
irritating, meaningless warning messages when doing IMA with irritating, meaningless warning messages when doing IMA with
save-temps). save-temps).
* doc/invoke.texi: Add "-combine" to list of Overall Options; * doc/invoke.texi: Add "-combine" to list of Overall Options;
remove documentation about IMA that is no longer accurate; Add remove documentation about IMA that is no longer accurate; Add
...@@ -527,7 +535,7 @@ ...@@ -527,7 +535,7 @@
* config/i386/i386.h (TARGET_NOCONA): New macro. * config/i386/i386.h (TARGET_NOCONA): New macro.
(TARGET_CPU_CPP_BUILTINS): Add code for Nocona. (TARGET_CPU_CPP_BUILTINS): Add code for Nocona.
(processor_type): Add PROCESSOR_NOCONA. (processor_type): Add PROCESSOR_NOCONA.
* config/i386/i386.md (cpu): Add nocona to the attribute values. * config/i386/i386.md (cpu): Add nocona to the attribute values.
* config/i386/i386.c (nocona_cost): New variable. * config/i386/i386.c (nocona_cost): New variable.
...@@ -544,7 +552,7 @@ ...@@ -544,7 +552,7 @@
Set up PROCESSOR_NOCONA for Nocona entry in processor_alias_table. Set up PROCESSOR_NOCONA for Nocona entry in processor_alias_table.
(incdec_operand): Prevent inc/dec generation for Nocona too. (incdec_operand): Prevent inc/dec generation for Nocona too.
(ix86_issue_rate): Add PROCESSOR_NOCONA. (ix86_issue_rate): Add PROCESSOR_NOCONA.
2004-04-01 Andrew Pinski <pinskia@physics.uc.edu> 2004-04-01 Andrew Pinski <pinskia@physics.uc.edu>
* rtlanal.c (find_reg_note): Manually * rtlanal.c (find_reg_note): Manually
...@@ -645,9 +653,9 @@ ...@@ -645,9 +653,9 @@
2004-04-01 Serge Belyshev <1319@bot.ru> 2004-04-01 Serge Belyshev <1319@bot.ru>
PR target/14702 PR target/14702
* config/i386/i386.md: fix source operand constraints in * config/i386/i386.md: fix source operand constraints in
mmx_pshufw, sse2_pshufd, sse2_pshuflw, sse2_pshufhw mmx_pshufw, sse2_pshufd, sse2_pshuflw, sse2_pshufhw
2004-04-01 Waldek Hebisch <hebisch@math.uni.wroc.pl> 2004-04-01 Waldek Hebisch <hebisch@math.uni.wroc.pl>
......
...@@ -112,13 +112,13 @@ do { \ ...@@ -112,13 +112,13 @@ do { \
(MASK_DWARF2_ASM | MASK_BIG_ENDIAN | MASK_ILP32 | MASK_INLINE_FLOAT_DIV_THR) (MASK_DWARF2_ASM | MASK_BIG_ENDIAN | MASK_ILP32 | MASK_INLINE_FLOAT_DIV_THR)
/* This needs to be set to force structure arguments with a single /* This needs to be set to force structure arguments with a single
field to be treated as structures and not as the type of their integer field to be treated as structures and not as the type of
field. Without this a structure with a single char will be their field. Without this a structure with a single char will be
returned just like a char variable and that is wrong on HP-UX returned just like a char variable, instead of being returned at the
IA64. */ top of the register as specified for big-endian IA64. */
#define MEMBER_TYPE_FORCES_BLK(FIELD, MODE) \ #define MEMBER_TYPE_FORCES_BLK(FIELD, MODE) \
(TREE_CODE (TREE_TYPE (FIELD)) != REAL_TYPE || MODE == TFmode) (!FLOAT_MODE_P (MODE) || (MODE) == TFmode)
/* ASM_OUTPUT_EXTERNAL_LIBCALL defaults to just a globalize_label call, /* ASM_OUTPUT_EXTERNAL_LIBCALL defaults to just a globalize_label call,
but that doesn't put out the @function type information which causes but that doesn't put out the @function type information which causes
......
...@@ -8732,7 +8732,7 @@ ia64_hpux_file_end (void) ...@@ -8732,7 +8732,7 @@ ia64_hpux_file_end (void)
for (p = extern_func_head; p; p = p->next) for (p = extern_func_head; p; p = p->next)
{ {
tree decl = p->decl; tree decl = p->decl;
tree id = DECL_NAME (decl); tree id = DECL_ASSEMBLER_NAME (decl);
if (!id) if (!id)
abort (); abort ();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment