/* Put the current working directory in an N_SO symbol. */
#ifndef DBX_WORKING_DIRECTORY /* Only some versions of DBX want this,
but GDB always does. */
- if (use_gdb_dbx_extensions)
+ if (use_gnu_debug_info_extensions)
#endif
{
if (cwd || (cwd = getpwd ()))
if (tem != TYPE_FIELDS (type))
CONTIN;
- if (use_gdb_dbx_extensions
+ if (use_gnu_debug_info_extensions
&& flag_minimal_debug
&& TREE_CODE (tem) == FIELD_DECL
&& DECL_VIRTUAL_P (tem)
fprintf (asmfile, "%s:", IDENTIFIER_POINTER (DECL_NAME (tem)));
CHARS (2 + IDENTIFIER_LENGTH (DECL_NAME (tem)));
- if (use_gdb_dbx_extensions
+ if (use_gnu_debug_info_extensions
&& (TREE_PRIVATE (tem) || TREE_PROTECTED (tem)
|| TREE_CODE (tem) != FIELD_DECL))
{
if (TREE_CODE (tem) == VAR_DECL)
{
- if (TREE_STATIC (tem) && use_gdb_dbx_extensions)
+ if (TREE_STATIC (tem) && use_gnu_debug_info_extensions)
{
char *name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (tem));
have_used_extensions = 1;
type_identifier_length = IDENTIFIER_LENGTH (type_encoding);
- if (TREE_CODE (methods) == FUNCTION_DECL)
- fndecl = methods;
- else if (TREE_VEC_ELT (methods, 0) != NULL_TREE)
+ if (TREE_VEC_ELT (methods, 0) != NULL_TREE)
fndecl = TREE_VEC_ELT (methods, 0);
- else fndecl = TREE_VEC_ELT (methods, 1);
+ else
+ fndecl = TREE_VEC_ELT (methods, 1);
while (fndecl)
{
fprintf (asmfile, (TREE_CODE (type) == RECORD_TYPE) ? "s%d" : "u%d",
TREE_INT_CST_LOW (tem));
- if (use_gdb_dbx_extensions)
+ if (use_gnu_debug_info_extensions)
{
if (n_baseclasses)
{
for (i = 0; i < n_baseclasses; i++)
{
tree child = TREE_VEC_ELT (BINFO_BASETYPES (TYPE_BINFO (type)), i);
- if (use_gdb_dbx_extensions)
+ if (use_gnu_debug_info_extensions)
{
have_used_extensions = 1;
putc (TREE_VIA_VIRTUAL (child) ? '1'
/* Write out the field declarations. */
dbxout_type_fields (type);
- if (use_gdb_dbx_extensions && TYPE_METHODS (type) != NULL_TREE)
+ if (use_gnu_debug_info_extensions && TYPE_METHODS (type) != NULL_TREE)
{
have_used_extensions = 1;
dbxout_type_methods (type);
}
putc (';', asmfile);
- if (use_gdb_dbx_extensions && TREE_CODE (type) == RECORD_TYPE
+ if (use_gnu_debug_info_extensions && TREE_CODE (type) == RECORD_TYPE
/* Avoid the ~ if we don't really need it--it confuses dbx. */
&& TYPE_VFIELD (type))
{
break;
case METHOD_TYPE:
- if (use_gdb_dbx_extensions)
+ if (use_gnu_debug_info_extensions)
{
have_used_extensions = 1;
putc ('#', asmfile);
break;
case OFFSET_TYPE:
- if (use_gdb_dbx_extensions)
+ if (use_gnu_debug_info_extensions)
{
have_used_extensions = 1;
putc ('@', asmfile);
break;
case REFERENCE_TYPE:
- if (use_gdb_dbx_extensions)
+ if (use_gnu_debug_info_extensions)
have_used_extensions = 1;
- putc (use_gdb_dbx_extensions ? '&' : '*', asmfile);
+ putc (use_gnu_debug_info_extensions ? '&' : '*', asmfile);
CHARS (1);
dbxout_type (TREE_TYPE (type), 0, 0);
break;
if ((TREE_CODE (type) == RECORD_TYPE
|| TREE_CODE (type) == UNION_TYPE)
&& TYPE_NAME (type) == decl
- && !(use_gdb_dbx_extensions && have_used_extensions)
+ && !(use_gnu_debug_info_extensions && have_used_extensions)
&& !TREE_ASM_WRITTEN (TYPE_NAME (type)))
{
tree name = TYPE_NAME (type);
|| TREE_CODE (type) == UNION_TYPE)
&& TYPE_NAME (type) == decl)
{
- if (use_gdb_dbx_extensions && have_used_extensions)
+ if (use_gnu_debug_info_extensions && have_used_extensions)
{
putc ('T', asmfile);
TREE_ASM_WRITTEN (TYPE_NAME (type)) = 1;
{
register rtx next = NEXT_INSN (insn);
register rtx prev = PREV_INSN (insn);
+ register int was_code_label = (GET_CODE (insn) == CODE_LABEL);
+ register int dont_really_delete = 0;
while (next && INSN_DELETED_P (next))
next = NEXT_INSN (next);
if (INSN_DELETED_P (insn))
return next;
- /* Mark this insn as deleted. */
-
- INSN_DELETED_P (insn) = 1;
+ /* Don't delete user-declared labels. Convert them to special NOTEs
+ instead. */
+ if (was_code_label && LABEL_NAME (insn) != 0)
+ {
+ PUT_CODE (insn, NOTE);
+ NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED_LABEL;
+ NOTE_SOURCE_FILE (insn) = 0;
+ dont_really_delete = 1;
+ }
+ else
+ /* Mark this insn as deleted. */
+ INSN_DELETED_P (insn) = 1;
/* If this is an unconditional jump, delete it from the jump chain. */
if (simplejump_p (insn))
/* Patch out INSN (and the barrier if any) */
- if (optimize)
+ if (optimize && ! dont_really_delete)
{
if (prev)
{
delete the dispatch table. The tablejump must have gone already.
It isn't useful to fall through into a table. */
- if (GET_CODE (insn) == CODE_LABEL
+ if (was_code_label
&& NEXT_INSN (insn) != 0
&& GET_CODE (NEXT_INSN (insn)) == JUMP_INSN
&& (GET_CODE (PATTERN (NEXT_INSN (insn))) == ADDR_VEC
/* If INSN was a label, delete insns following it if now unreachable. */
- if (GET_CODE (insn) == CODE_LABEL && prev
- && GET_CODE (prev) == BARRIER)
+ if (was_code_label && prev && GET_CODE (prev) == BARRIER)
{
register RTX_CODE code;
while (next != 0
"NOTE_INSN_LOOP_BEG", "NOTE_INSN_LOOP_END",
"NOTE_INSN_FUNCTION_END", "NOTE_INSN_SETJMP",
"NOTE_INSN_LOOP_CONT", "NOTE_INSN_LOOP_VTOP",
- "NOTE_INSN_PROLOGUE_END", "NOTE_INSN_EPILOGUE_BEG" };
+ "NOTE_INSN_PROLOGUE_END", "NOTE_INSN_EPILOGUE_BEG",
+ "NOT_INSN_DELETED_LABEL"};
char *reg_note_name[] = { "", "REG_DEAD", "REG_INC", "REG_EQUIV", "REG_WAS_0",
"REG_EQUAL", "REG_RETVAL", "REG_LIBCALL",