toplev.c (input_file_stack, [...]): Remove.
gcc * toplev.c (input_file_stack, input_file_stack_tick, fs_p, input_file_stack_history, input_file_stack_restored): Remove. (push_srcloc, pop_srcloc, restore_input_file_stack): Likewise. * input.h (struct file_stack): Remove. (push_srcloc, pop_srcloc, restore_input_file_stack): Likewise. (input_file_stack, input_file_stack_tick, INPUT_FILE_STACK_BITS): Likewise. * diagnostic.h (struct diagnostic_context) <last_module>: Change type. (diagnostic_last_module_changed): Add 'map' argument. (diagnostic_set_last_function): Likewise. * diagnostic.c (undiagnostic_report_current_module): Iterate using line map, not input_file_stack. * c-lex.c (fe_file_change): Don't use push_srcloc or pop_srcloc. gcc/cp * parser.c (struct cp_token) <input_file_stack_index>: Remove. (cp_lexer_get_preprocessor_token): Update. (cp_lexer_set_source_position_from_token): Don't call restore_input_file_stack. * lex.c (cxx_init): Don't use push_srcloc or pop_srcloc. gcc/testsuite * g++.dg/warn/pragma-system_header2.C: Ignore "included from" line. From-SVN: r132775
This commit is contained in:
parent
3cbe0ba6aa
commit
966e8f4d3f
|
@ -1,3 +1,20 @@
|
|||
2008-02-29 Tom Tromey <tromey@redhat.com>
|
||||
|
||||
* toplev.c (input_file_stack, input_file_stack_tick, fs_p,
|
||||
input_file_stack_history, input_file_stack_restored): Remove.
|
||||
(push_srcloc, pop_srcloc, restore_input_file_stack): Likewise.
|
||||
* input.h (struct file_stack): Remove.
|
||||
(push_srcloc, pop_srcloc, restore_input_file_stack): Likewise.
|
||||
(input_file_stack, input_file_stack_tick, INPUT_FILE_STACK_BITS):
|
||||
Likewise.
|
||||
* diagnostic.h (struct diagnostic_context) <last_module>: Change
|
||||
type.
|
||||
(diagnostic_last_module_changed): Add 'map' argument.
|
||||
(diagnostic_set_last_function): Likewise.
|
||||
* diagnostic.c (undiagnostic_report_current_module): Iterate using
|
||||
line map, not input_file_stack.
|
||||
* c-lex.c (fe_file_change): Don't use push_srcloc or pop_srcloc.
|
||||
|
||||
2008-02-29 Paul Brook <paul@codesourcery.com>
|
||||
|
||||
* config/arm/arm.md (arm_addsi3): Add r/k/n alternative.
|
||||
|
|
|
@ -207,8 +207,7 @@ fe_file_change (const struct line_map *new_map)
|
|||
{
|
||||
int included_at = LAST_SOURCE_LINE_LOCATION (new_map - 1);
|
||||
|
||||
input_location = included_at;
|
||||
push_srcloc (new_map->start_location);
|
||||
input_location = new_map->start_location;
|
||||
(*debug_hooks->start_source_file) (included_at, new_map->to_file);
|
||||
#ifndef NO_IMPLICIT_EXTERN_C
|
||||
if (c_header_level)
|
||||
|
@ -231,7 +230,7 @@ fe_file_change (const struct line_map *new_map)
|
|||
--pending_lang_change;
|
||||
}
|
||||
#endif
|
||||
pop_srcloc ();
|
||||
input_location = new_map->start_location;
|
||||
|
||||
(*debug_hooks->end_source_file) (new_map->to_line);
|
||||
}
|
||||
|
|
|
@ -1,3 +1,11 @@
|
|||
2008-02-29 Tom Tromey <tromey@redhat.com>
|
||||
|
||||
* parser.c (struct cp_token) <input_file_stack_index>: Remove.
|
||||
(cp_lexer_get_preprocessor_token): Update.
|
||||
(cp_lexer_set_source_position_from_token): Don't call
|
||||
restore_input_file_stack.
|
||||
* lex.c (cxx_init): Don't use push_srcloc or pop_srcloc.
|
||||
|
||||
2008-02-28 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
Revert:
|
||||
|
|
|
@ -372,6 +372,7 @@ bool statement_code_p[MAX_TREE_CODES];
|
|||
bool
|
||||
cxx_init (void)
|
||||
{
|
||||
location_t saved_loc;
|
||||
unsigned int i;
|
||||
static const enum tree_code stmt_codes[] = {
|
||||
CTOR_INITIALIZER, TRY_BLOCK, HANDLER,
|
||||
|
@ -385,7 +386,8 @@ cxx_init (void)
|
|||
for (i = 0; i < ARRAY_SIZE (stmt_codes); i++)
|
||||
statement_code_p[stmt_codes[i]] = true;
|
||||
|
||||
push_srcloc (BUILTINS_LOCATION);
|
||||
saved_loc = input_location;
|
||||
input_location = BUILTINS_LOCATION;
|
||||
|
||||
init_reswords ();
|
||||
init_tree ();
|
||||
|
@ -413,7 +415,7 @@ cxx_init (void)
|
|||
|
||||
if (c_common_init () == false)
|
||||
{
|
||||
pop_srcloc();
|
||||
input_location = saved_loc;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -421,7 +423,7 @@ cxx_init (void)
|
|||
|
||||
init_repo ();
|
||||
|
||||
pop_srcloc();
|
||||
input_location = saved_loc;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -79,8 +79,6 @@ typedef struct cp_token GTY (())
|
|||
KEYWORD is RID_MAX) iff this name was looked up and found to be
|
||||
ambiguous. An error has already been reported. */
|
||||
BOOL_BITFIELD ambiguous_p : 1;
|
||||
/* The input file stack index at which this token was found. */
|
||||
unsigned input_file_stack_index : INPUT_FILE_STACK_BITS;
|
||||
/* The value associated with this token, if any. */
|
||||
union cp_token_value {
|
||||
/* Used for CPP_NESTED_NAME_SPECIFIER and CPP_TEMPLATE_ID. */
|
||||
|
@ -99,7 +97,7 @@ DEF_VEC_ALLOC_P (cp_token_position,heap);
|
|||
|
||||
static cp_token eof_token =
|
||||
{
|
||||
CPP_EOF, RID_MAX, 0, PRAGMA_NONE, 0, 0, false, 0, { NULL },
|
||||
CPP_EOF, RID_MAX, 0, PRAGMA_NONE, 0, false, 0, { NULL },
|
||||
0
|
||||
};
|
||||
|
||||
|
@ -408,7 +406,6 @@ cp_lexer_get_preprocessor_token (cp_lexer *lexer, cp_token *token)
|
|||
token->type
|
||||
= c_lex_with_flags (&token->u.value, &token->location, &token->flags,
|
||||
lexer == NULL ? 0 : C_LEX_RAW_STRINGS);
|
||||
token->input_file_stack_index = input_file_stack_tick;
|
||||
token->keyword = RID_MAX;
|
||||
token->pragma_kind = PRAGMA_NONE;
|
||||
token->in_system_header = in_system_header;
|
||||
|
@ -490,7 +487,6 @@ cp_lexer_set_source_position_from_token (cp_token *token)
|
|||
{
|
||||
input_location = token->location;
|
||||
in_system_header = token->in_system_header;
|
||||
restore_input_file_stack (token->input_file_stack_index);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -269,7 +269,7 @@ diagnostic_report_current_function (diagnostic_context *context,
|
|||
void
|
||||
diagnostic_report_current_module (diagnostic_context *context)
|
||||
{
|
||||
struct file_stack *p;
|
||||
const struct line_map *map;
|
||||
|
||||
if (pp_needs_newline (context->printer))
|
||||
{
|
||||
|
@ -277,23 +277,29 @@ diagnostic_report_current_module (diagnostic_context *context)
|
|||
pp_needs_newline (context->printer) = false;
|
||||
}
|
||||
|
||||
p = input_file_stack;
|
||||
if (p && diagnostic_last_module_changed (context))
|
||||
if (input_location <= BUILTINS_LOCATION)
|
||||
return;
|
||||
|
||||
map = linemap_lookup (line_table, input_location);
|
||||
if (map && diagnostic_last_module_changed (context, map))
|
||||
{
|
||||
expanded_location xloc = expand_location (p->location);
|
||||
pp_verbatim (context->printer,
|
||||
"In file included from %s:%d",
|
||||
xloc.file, xloc.line);
|
||||
while ((p = p->next) != NULL)
|
||||
diagnostic_set_last_module (context, map);
|
||||
if (! MAIN_FILE_P (map))
|
||||
{
|
||||
xloc = expand_location (p->location);
|
||||
map = INCLUDED_FROM (line_table, map);
|
||||
pp_verbatim (context->printer,
|
||||
",\n from %s:%d",
|
||||
xloc.file, xloc.line);
|
||||
"In file included from %s:%d",
|
||||
map->to_file, LAST_SOURCE_LINE (map));
|
||||
while (! MAIN_FILE_P (map))
|
||||
{
|
||||
map = INCLUDED_FROM (line_table, map);
|
||||
pp_verbatim (context->printer,
|
||||
",\n from %s:%d",
|
||||
map->to_file, LAST_SOURCE_LINE (map));
|
||||
}
|
||||
pp_verbatim (context->printer, ":");
|
||||
pp_newline (context->printer);
|
||||
}
|
||||
pp_verbatim (context->printer, ":");
|
||||
diagnostic_set_last_module (context);
|
||||
pp_newline (context->printer);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* Various declarations for language-independent diagnostics subroutines.
|
||||
Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
|
||||
Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
|
||||
Free Software Foundation, Inc.
|
||||
Contributed by Gabriel Dos Reis <gdr@codesourcery.com>
|
||||
|
||||
|
@ -110,8 +110,9 @@ struct diagnostic_context
|
|||
function name. */
|
||||
tree last_function;
|
||||
|
||||
/* Used to detect when input_file_stack has changed since last described. */
|
||||
int last_module;
|
||||
/* Used to detect when the input file stack has changed since last
|
||||
described. */
|
||||
const struct line_map *last_module;
|
||||
|
||||
int lock;
|
||||
};
|
||||
|
@ -152,13 +153,13 @@ struct diagnostic_context
|
|||
|
||||
/* True if the last module or file in which a diagnostic was reported is
|
||||
different from the current one. */
|
||||
#define diagnostic_last_module_changed(DC) \
|
||||
((DC)->last_module != input_file_stack_tick)
|
||||
#define diagnostic_last_module_changed(DC, MAP) \
|
||||
((DC)->last_module != MAP)
|
||||
|
||||
/* Remember the current module or file as being the last one in which we
|
||||
report a diagnostic. */
|
||||
#define diagnostic_set_last_module(DC) \
|
||||
(DC)->last_module = input_file_stack_tick
|
||||
#define diagnostic_set_last_module(DC, MAP) \
|
||||
(DC)->last_module = MAP
|
||||
|
||||
/* Raise SIGABRT on any diagnostic of severity DK_ERROR or higher. */
|
||||
#define diagnostic_abort_on_error(DC) \
|
||||
|
|
19
gcc/input.h
19
gcc/input.h
|
@ -49,19 +49,10 @@ extern expanded_location expand_location (source_location);
|
|||
This could be removed but it hardly seems worth the effort. */
|
||||
typedef source_location location_t;
|
||||
|
||||
struct file_stack
|
||||
{
|
||||
struct file_stack *next;
|
||||
location_t location;
|
||||
};
|
||||
|
||||
/* Top-level source file. */
|
||||
extern const char *main_input_filename;
|
||||
|
||||
extern location_t input_location;
|
||||
extern void push_srcloc (location_t);
|
||||
extern void pop_srcloc (void);
|
||||
extern void restore_input_file_stack (int);
|
||||
|
||||
#define LOCATION_FILE(LOC) ((expand_location (LOC)).file)
|
||||
#define LOCATION_LINE(LOC) ((expand_location (LOC)).line)
|
||||
|
@ -69,14 +60,4 @@ extern void restore_input_file_stack (int);
|
|||
#define input_line LOCATION_LINE (input_location)
|
||||
#define input_filename LOCATION_FILE (input_location)
|
||||
|
||||
/* Stack of currently pending input files.
|
||||
The line member is not accurate for the innermost file on the stack. */
|
||||
extern struct file_stack *input_file_stack;
|
||||
|
||||
/* Incremented on each change to input_file_stack. */
|
||||
extern int input_file_stack_tick;
|
||||
|
||||
/* The number of bits available for input_file_stack_tick. */
|
||||
#define INPUT_FILE_STACK_BITS 31
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2008-02-29 Tom Tromey <tromey@redhat.com>
|
||||
|
||||
* g++.dg/warn/pragma-system_header2.C: Ignore "included from"
|
||||
line.
|
||||
|
||||
2008-02-29 Sebastian Pop <sebastian.pop@amd.com>
|
||||
|
||||
* testsuite/gcc.dg/tree-ssa/ltrans-8.c: Increase the size of strides
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
#include "pragma-system_header2.h"
|
||||
|
||||
|
||||
void f()
|
||||
{
|
||||
g<int>();
|
||||
|
@ -11,3 +12,6 @@ void f()
|
|||
|
||||
// { dg-warning "conversion" "" { target *-*-* } 2 }
|
||||
// { dg-warning "conversion" "" { target *-*-* } 5 }
|
||||
|
||||
// I couldn't find another way to make this work.
|
||||
// { dg-prune-output "In file included from" }
|
||||
|
|
74
gcc/toplev.c
74
gcc/toplev.c
|
@ -144,23 +144,6 @@ location_t input_location;
|
|||
|
||||
struct line_maps *line_table;
|
||||
|
||||
/* Stack of currently pending input files. */
|
||||
|
||||
struct file_stack *input_file_stack;
|
||||
|
||||
/* Incremented on each change to input_file_stack. */
|
||||
int input_file_stack_tick;
|
||||
|
||||
/* Record of input_file_stack at each tick. */
|
||||
typedef struct file_stack *fs_p;
|
||||
DEF_VEC_P(fs_p);
|
||||
DEF_VEC_ALLOC_P(fs_p,heap);
|
||||
static VEC(fs_p,heap) *input_file_stack_history;
|
||||
|
||||
/* Whether input_file_stack has been restored to a previous state (in
|
||||
which case there should be no more pushing). */
|
||||
static bool input_file_stack_restored;
|
||||
|
||||
/* Name to use as base of names for dump output files. */
|
||||
|
||||
const char *dump_base_name;
|
||||
|
@ -953,63 +936,6 @@ warn_deprecated_use (tree node)
|
|||
}
|
||||
}
|
||||
|
||||
/* Save the current INPUT_LOCATION on the top entry in the
|
||||
INPUT_FILE_STACK. Push a new entry for FILE and LINE, and set the
|
||||
INPUT_LOCATION accordingly. */
|
||||
|
||||
void
|
||||
push_srcloc (location_t fline)
|
||||
{
|
||||
struct file_stack *fs;
|
||||
|
||||
gcc_assert (!input_file_stack_restored);
|
||||
if (input_file_stack_tick == (int) ((1U << INPUT_FILE_STACK_BITS) - 1))
|
||||
sorry ("GCC supports only %d input file changes", input_file_stack_tick);
|
||||
|
||||
fs = XNEW (struct file_stack);
|
||||
fs->location = input_location;
|
||||
fs->next = input_file_stack;
|
||||
input_location = fline;
|
||||
input_file_stack = fs;
|
||||
input_file_stack_tick++;
|
||||
VEC_safe_push (fs_p, heap, input_file_stack_history, input_file_stack);
|
||||
}
|
||||
|
||||
/* Pop the top entry off the stack of presently open source files.
|
||||
Restore the INPUT_LOCATION from the new topmost entry on the
|
||||
stack. */
|
||||
|
||||
void
|
||||
pop_srcloc (void)
|
||||
{
|
||||
struct file_stack *fs;
|
||||
|
||||
gcc_assert (!input_file_stack_restored);
|
||||
if (input_file_stack_tick == (int) ((1U << INPUT_FILE_STACK_BITS) - 1))
|
||||
sorry ("GCC supports only %d input file changes", input_file_stack_tick);
|
||||
|
||||
fs = input_file_stack;
|
||||
input_location = fs->location;
|
||||
input_file_stack = fs->next;
|
||||
input_file_stack_tick++;
|
||||
VEC_safe_push (fs_p, heap, input_file_stack_history, input_file_stack);
|
||||
}
|
||||
|
||||
/* Restore the input file stack to its state as of TICK, for the sake
|
||||
of diagnostics after processing the whole input. Once this has
|
||||
been called, push_srcloc and pop_srcloc may no longer be
|
||||
called. */
|
||||
void
|
||||
restore_input_file_stack (int tick)
|
||||
{
|
||||
if (tick == 0)
|
||||
input_file_stack = NULL;
|
||||
else
|
||||
input_file_stack = VEC_index (fs_p, input_file_stack_history, tick - 1);
|
||||
input_file_stack_tick = tick;
|
||||
input_file_stack_restored = true;
|
||||
}
|
||||
|
||||
/* Compile an entire translation unit. Write a file of assembly
|
||||
output and various debugging dumps. */
|
||||
|
||||
|
|
Loading…
Reference in New Issue