c-lex.c: Convert to ISO C90.

* c-lex.c: Convert to ISO C90.
	* c-objc-common.c: Likewise.
	* c-opts.c: Likewise.
	* c-pch.c: Likewise.
	* c-ppoutput.c: Likewise.
	* c-pragma.h: Likewise.
	* c-pretty-print.c: Likewise.
	* c-pretty-print.h: Likewise.
	* c-semantics.c: Likewise.
	* c-tree.h: Likewise.
	* c-typeck.c: Likewise.

From-SVN: r68327
This commit is contained in:
Andreas Jaeger 2003-06-22 15:41:26 +02:00 committed by Andreas Jaeger
parent 3346b668ca
commit 2f6e4e977d
11 changed files with 610 additions and 938 deletions

View File

@ -1,5 +1,17 @@
2003-06-22 Andreas Jaeger <aj@suse.de>
* c-lex.c: Convert to ISO C90.
* c-objc-common.c: Likewise.
* c-opts.c: Likewise.
* c-pch.c: Likewise.
* c-ppoutput.c: Likewise.
* c-pragma.h: Likewise.
* c-pretty-print.c: Likewise.
* c-pretty-print.h: Likewise.
* c-semantics.c: Likewise.
* c-tree.h: Likewise.
* c-typeck.c: Likewise.
* c-lang.c: Convert to ISO C90.
2003-06-22 Neil Booth <neil@daikokuya.co.uk>

View File

@ -64,27 +64,24 @@ int c_header_level; /* depth in C headers - C++ only */
/* Nonzero tells yylex to ignore \ in string constants. */
static int ignore_escape_flag;
static tree interpret_integer PARAMS ((const cpp_token *, unsigned int));
static tree interpret_float PARAMS ((const cpp_token *, unsigned int));
static tree interpret_integer (const cpp_token *, unsigned int);
static tree interpret_float (const cpp_token *, unsigned int);
static enum integer_type_kind
narrowest_unsigned_type PARAMS ((tree, unsigned int));
narrowest_unsigned_type (tree, unsigned int);
static enum integer_type_kind
narrowest_signed_type PARAMS ((tree, unsigned int));
static tree lex_string PARAMS ((const cpp_string *));
static tree lex_charconst PARAMS ((const cpp_token *));
static void update_header_times PARAMS ((const char *));
static int dump_one_header PARAMS ((splay_tree_node, void *));
static void cb_line_change PARAMS ((cpp_reader *, const cpp_token *, int));
static void cb_ident PARAMS ((cpp_reader *, unsigned int,
const cpp_string *));
static void cb_def_pragma PARAMS ((cpp_reader *, unsigned int));
static void cb_define PARAMS ((cpp_reader *, unsigned int,
cpp_hashnode *));
static void cb_undef PARAMS ((cpp_reader *, unsigned int,
cpp_hashnode *));
narrowest_signed_type (tree, unsigned int);
static tree lex_string (const cpp_string *);
static tree lex_charconst (const cpp_token *);
static void update_header_times (const char *);
static int dump_one_header (splay_tree_node, void *);
static void cb_line_change (cpp_reader *, const cpp_token *, int);
static void cb_ident (cpp_reader *, unsigned int, const cpp_string *);
static void cb_def_pragma (cpp_reader *, unsigned int);
static void cb_define (cpp_reader *, unsigned int, cpp_hashnode *);
static void cb_undef (cpp_reader *, unsigned int, cpp_hashnode *);
void
init_c_lex ()
init_c_lex (void)
{
struct cpp_callbacks *cb;
struct c_fileinfo *toplevel;
@ -100,7 +97,7 @@ init_c_lex ()
body_time = get_run_time ();
toplevel->time = body_time;
}
cb = cpp_get_callbacks (parse_in);
cb->line_change = cb_line_change;
@ -120,8 +117,7 @@ init_c_lex ()
}
struct c_fileinfo *
get_fileinfo (name)
const char *name;
get_fileinfo (const char *name)
{
splay_tree_node n;
struct c_fileinfo *fi;
@ -140,8 +136,7 @@ get_fileinfo (name)
}
static void
update_header_times (name)
const char *name;
update_header_times (const char *name)
{
/* Changing files again. This means currently collected time
is charged against header time, and body time starts back at 0. */
@ -156,9 +151,7 @@ update_header_times (name)
}
static int
dump_one_header (n, dummy)
splay_tree_node n;
void *dummy ATTRIBUTE_UNUSED;
dump_one_header (splay_tree_node n, void *dummy ATTRIBUTE_UNUSED)
{
print_time ((const char *) n->key,
((struct c_fileinfo *) n->value)->time);
@ -166,7 +159,7 @@ dump_one_header (n, dummy)
}
void
dump_time_statistics ()
dump_time_statistics (void)
{
struct c_fileinfo *file = get_fileinfo (input_filename);
int this_time = get_run_time ();
@ -183,10 +176,9 @@ dump_time_statistics ()
}
static void
cb_ident (pfile, line, str)
cpp_reader *pfile ATTRIBUTE_UNUSED;
unsigned int line ATTRIBUTE_UNUSED;
const cpp_string *str ATTRIBUTE_UNUSED;
cb_ident (cpp_reader *pfile ATTRIBUTE_UNUSED,
unsigned int line ATTRIBUTE_UNUSED,
const cpp_string *str ATTRIBUTE_UNUSED)
{
#ifdef ASM_OUTPUT_IDENT
if (! flag_no_ident)
@ -201,17 +193,14 @@ cb_ident (pfile, line, str)
/* Called at the start of every non-empty line. TOKEN is the first
lexed token on the line. Used for diagnostic line numbers. */
static void
cb_line_change (pfile, token, parsing_args)
cpp_reader *pfile ATTRIBUTE_UNUSED;
const cpp_token *token;
int parsing_args ATTRIBUTE_UNUSED;
cb_line_change (cpp_reader *pfile ATTRIBUTE_UNUSED, const cpp_token *token,
int parsing_args ATTRIBUTE_UNUSED)
{
src_lineno = SOURCE_LINE (map, token->line);
}
void
fe_file_change (new_map)
const struct line_map *new_map;
fe_file_change (const struct line_map *new_map)
{
unsigned int to_line = SOURCE_LINE (new_map, new_map->to_line);
@ -250,7 +239,7 @@ fe_file_change (new_map)
}
#endif
pop_srcloc ();
(*debug_hooks->end_source_file) (to_line);
}
@ -265,9 +254,7 @@ fe_file_change (new_map)
}
static void
cb_def_pragma (pfile, line)
cpp_reader *pfile;
unsigned int line;
cb_def_pragma (cpp_reader *pfile, unsigned int line)
{
/* Issue a warning message if we have been asked to do so. Ignore
unknown pragmas in system headers unless an explicit
@ -294,10 +281,7 @@ cb_def_pragma (pfile, line)
/* #define callback for DWARF and DWARF2 debug info. */
static void
cb_define (pfile, line, node)
cpp_reader *pfile;
unsigned int line;
cpp_hashnode *node;
cb_define (cpp_reader *pfile, unsigned int line, cpp_hashnode *node)
{
(*debug_hooks->define) (SOURCE_LINE (map, line),
(const char *) cpp_macro_definition (pfile, node));
@ -305,18 +289,15 @@ cb_define (pfile, line, node)
/* #undef callback for DWARF and DWARF2 debug info. */
static void
cb_undef (pfile, line, node)
cpp_reader *pfile ATTRIBUTE_UNUSED;
unsigned int line;
cpp_hashnode *node;
cb_undef (cpp_reader *pfile ATTRIBUTE_UNUSED, unsigned int line,
cpp_hashnode *node)
{
(*debug_hooks->undef) (SOURCE_LINE (map, line),
(const char *) NODE_NAME (node));
}
int
c_lex (value)
tree *value;
c_lex (tree *value)
{
const cpp_token *tok;
@ -403,9 +384,7 @@ c_lex (value)
minimum specified by FLAGS, that can fit VALUE, or itk_none if
there isn't one. */
static enum integer_type_kind
narrowest_unsigned_type (value, flags)
tree value;
unsigned int flags;
narrowest_unsigned_type (tree value, unsigned int flags)
{
enum integer_type_kind itk;
@ -429,9 +408,7 @@ narrowest_unsigned_type (value, flags)
/* Ditto, but narrowest signed type. */
static enum integer_type_kind
narrowest_signed_type (value, flags)
tree value;
unsigned int flags;
narrowest_signed_type (tree value, unsigned int flags)
{
enum integer_type_kind itk;
@ -455,9 +432,7 @@ narrowest_signed_type (value, flags)
/* Interpret TOKEN, an integer with FLAGS as classified by cpplib. */
static tree
interpret_integer (token, flags)
const cpp_token *token;
unsigned int flags;
interpret_integer (const cpp_token *token, unsigned int flags)
{
tree value, type;
enum integer_type_kind itk;
@ -535,9 +510,7 @@ interpret_integer (token, flags)
/* Interpret TOKEN, a floating point number with FLAGS as classified
by cpplib. */
static tree
interpret_float (token, flags)
const cpp_token *token;
unsigned int flags;
interpret_float (const cpp_token *token, unsigned int flags)
{
tree type;
tree value;
@ -599,15 +572,14 @@ interpret_float (token, flags)
}
static tree
lex_string (str)
const cpp_string *str;
lex_string (const cpp_string *str)
{
bool wide;
tree value;
char *buf, *q;
cppchar_t c;
const unsigned char *p, *limit;
wide = str->text[0] == 'L';
p = str->text + 1 + wide;
limit = str->text + str->len - 1;
@ -619,7 +591,7 @@ lex_string (str)
if (c == '\\' && !ignore_escape_flag)
c = cpp_parse_escape (parse_in, &p, limit, wide);
/* Add this single character into the buffer either as a wchar_t,
a multibyte sequence, or as a single byte. */
if (wide)
@ -672,8 +644,7 @@ lex_string (str)
/* Converts a (possibly wide) character constant token into a tree. */
static tree
lex_charconst (token)
const cpp_token *token;
lex_charconst (const cpp_token *token)
{
cppchar_t result;
tree type, value;
@ -681,7 +652,7 @@ lex_charconst (token)
int unsignedp;
result = cpp_interpret_charconst (parse_in, token,
&chars_seen, &unsignedp);
&chars_seen, &unsignedp);
/* Cast to cppchar_signed_t to get correct sign-extension of RESULT
before possibly widening to HOST_WIDE_INT for build_int_2. */

View File

@ -1,5 +1,5 @@
/* Some code common to C and ObjC front ends.
Copyright (C) 2001, 2002 Free Software Foundation, Inc.
Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
This file is part of GCC.
@ -39,17 +39,16 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "target.h"
#include "cgraph.h"
static bool c_tree_printer PARAMS ((output_buffer *, text_info *));
static tree inline_forbidden_p PARAMS ((tree *, int *, void *));
static void expand_deferred_fns PARAMS ((void));
static tree start_cdtor PARAMS ((int));
static void finish_cdtor PARAMS ((tree));
static bool c_tree_printer (output_buffer *, text_info *);
static tree inline_forbidden_p (tree *, int *, void *);
static void expand_deferred_fns (void);
static tree start_cdtor (int);
static void finish_cdtor (tree);
static GTY(()) varray_type deferred_fns;
int
c_missing_noreturn_ok_p (decl)
tree decl;
c_missing_noreturn_ok_p (tree decl)
{
/* A missing noreturn is not ok for freestanding implementations and
ok for the `main' function in hosted implementations. */
@ -61,8 +60,7 @@ c_missing_noreturn_ok_p (decl)
such functions always being inlined when optimizing. */
int
c_disregard_inline_limits (fn)
tree fn;
c_disregard_inline_limits (tree fn)
{
if (lookup_attribute ("always_inline", DECL_ATTRIBUTES (fn)) != NULL)
return 1;
@ -71,10 +69,8 @@ c_disregard_inline_limits (fn)
}
static tree
inline_forbidden_p (nodep, walk_subtrees, fn)
tree *nodep;
int *walk_subtrees ATTRIBUTE_UNUSED;
void *fn;
inline_forbidden_p (tree *nodep, int *walk_subtrees ATTRIBUTE_UNUSED,
void *fn)
{
tree node = *nodep;
tree t;
@ -160,8 +156,7 @@ inline_forbidden_p (nodep, walk_subtrees, fn)
}
int
c_cannot_inline_tree_fn (fnp)
tree *fnp;
c_cannot_inline_tree_fn (tree *fnp)
{
tree fn = *fnp;
tree t;
@ -170,7 +165,7 @@ c_cannot_inline_tree_fn (fnp)
&& lookup_attribute ("always_inline", DECL_ATTRIBUTES (fn)) == NULL)
return 1;
/* Don't auto-inline anything that might not be bound within
/* Don't auto-inline anything that might not be bound within
this unit of translation. */
if (!DECL_DECLARED_INLINE_P (fn) && !(*targetm.binds_local_p) (fn))
goto cannot_inline;
@ -215,7 +210,7 @@ c_cannot_inline_tree_fn (fnp)
if (! t)
return 0;
}
if (walk_tree (&DECL_SAVED_TREE (fn), inline_forbidden_p, fn, NULL))
goto cannot_inline;
@ -229,8 +224,7 @@ c_cannot_inline_tree_fn (fnp)
/* Called from check_global_declarations. */
bool
c_warn_unused_global_decl (decl)
tree decl;
c_warn_unused_global_decl (tree decl)
{
if (TREE_CODE (decl) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (decl))
return false;
@ -242,7 +236,7 @@ c_warn_unused_global_decl (decl)
/* Initialization common to C and Objective-C front ends. */
bool
c_objc_common_init ()
c_objc_common_init (void)
{
static const enum tree_code stmt_codes[] = {
c_common_stmt_codes
@ -282,8 +276,7 @@ c_objc_common_init ()
to RTL is only done at the end of the compilation. */
int
defer_fn (fn)
tree fn;
defer_fn (tree fn)
{
VARRAY_PUSH_TREE (deferred_fns, fn);
@ -293,7 +286,7 @@ defer_fn (fn)
/* Expand deferred functions for C and ObjC. */
static void
expand_deferred_fns ()
expand_deferred_fns (void)
{
unsigned int i;
@ -315,8 +308,7 @@ expand_deferred_fns ()
}
static tree
start_cdtor (method_type)
int method_type;
start_cdtor (int method_type)
{
tree fnname = get_file_function_name (method_type);
tree void_list_node_1 = build_tree_list (NULL_TREE, void_type_node);
@ -342,8 +334,7 @@ start_cdtor (method_type)
}
static void
finish_cdtor (body)
tree body;
finish_cdtor (tree body)
{
tree scope;
tree block;
@ -361,7 +352,7 @@ finish_cdtor (body)
/* Called at end of parsing, but before end-of-file processing. */
void
c_objc_common_finish_file ()
c_objc_common_finish_file (void)
{
if (pch_file)
c_common_write_pch ();
@ -420,9 +411,7 @@ c_objc_common_finish_file ()
Please notice when called, the `%' part was already skipped by the
diagnostic machinery. */
static bool
c_tree_printer (buffer, text)
output_buffer *buffer;
text_info *text;
c_tree_printer (output_buffer *buffer, text_info *text)
{
tree t = va_arg (*text->args_ptr, tree);

View File

@ -100,22 +100,22 @@ static size_t deferred_count, deferred_size;
/* Number of deferred options scanned for -include. */
static size_t include_cursor;
static void missing_arg PARAMS ((enum opt_code));
static void set_Wimplicit PARAMS ((int));
static void complain_wrong_lang PARAMS ((size_t, int));
static void write_langs PARAMS ((char *, int));
static void print_help PARAMS ((void));
static void handle_OPT_d PARAMS ((const char *));
static void set_std_cxx98 PARAMS ((int));
static void set_std_c89 PARAMS ((int, int));
static void set_std_c99 PARAMS ((int));
static void check_deps_environment_vars PARAMS ((void));
static void handle_deferred_opts PARAMS ((void));
static void sanitize_cpp_opts PARAMS ((void));
static void add_prefixed_path PARAMS ((const char *, size_t));
static void push_command_line_include PARAMS ((void));
static void cb_file_change PARAMS ((cpp_reader *, const struct line_map *));
static void finish_options PARAMS ((void));
static void missing_arg (enum opt_code);
static void set_Wimplicit (int);
static void complain_wrong_lang (size_t, int);
static void write_langs (char *, int);
static void print_help (void);
static void handle_OPT_d (const char *);
static void set_std_cxx98 (int);
static void set_std_c89 (int, int);
static void set_std_c99 (int);
static void check_deps_environment_vars (void);
static void handle_deferred_opts (void);
static void sanitize_cpp_opts (void);
static void add_prefixed_path (const char *, size_t);
static void push_command_line_include (void);
static void cb_file_change (cpp_reader *, const struct line_map *);
static void finish_options (void);
#ifndef STDC_0_IN_SYSTEM_HEADERS
#define STDC_0_IN_SYSTEM_HEADERS 0
@ -123,7 +123,7 @@ static void finish_options PARAMS ((void));
/* Holds switches parsed by c_common_handle_option (), but whose
handling is deferred to c_common_post_options (). */
static void defer_opt PARAMS ((enum opt_code, const char *));
static void defer_opt (enum opt_code, const char *);
static struct deferred_opt
{
enum opt_code code;
@ -193,9 +193,7 @@ missing_arg (enum opt_code code)
/* Defer option CODE with argument ARG. */
static void
defer_opt (code, arg)
enum opt_code code;
const char *arg;
defer_opt (enum opt_code code, const char *arg)
{
/* FIXME: this should be in c_common_init_options, which should take
argc and argv. */
@ -217,8 +215,7 @@ defer_opt (code, arg)
/* Common initialization before parsing options. */
int
c_common_init_options (lang)
enum c_language_kind lang;
c_common_init_options (enum c_language_kind lang)
{
c_language = lang;
parse_in = cpp_create_reader (lang == clk_c ? CLK_GNUC89 : CLK_GNUCXX,
@ -388,9 +385,9 @@ c_common_handle_option (size_t scode, const char *arg, int value)
warn_sign_compare = value;
warn_switch = value;
warn_strict_aliasing = value;
/* Only warn about unknown pragmas that are not in system
headers. */
headers. */
warn_unknown_pragmas = value;
/* We save the value of warn_uninitialized, since if they put
@ -653,7 +650,7 @@ c_common_handle_option (size_t scode, const char *arg, int value)
case OPT_Wunknown_pragmas:
/* Set to greater than 1, so that even unknown pragmas in
system headers will be warned about. */
system headers will be warned about. */
warn_unknown_pragmas = value * 2;
break;
@ -667,7 +664,7 @@ c_common_handle_option (size_t scode, const char *arg, int value)
else
warn_write_strings = value;
break;
case OPT_ansi:
if (c_language == clk_c)
set_std_c89 (false, true);
@ -1054,8 +1051,7 @@ c_common_handle_option (size_t scode, const char *arg, int value)
/* Post-switch processing. */
bool
c_common_post_options (pfilename)
const char **pfilename;
c_common_post_options (const char **pfilename)
{
/* Canonicalize the input and output filenames. */
if (in_fname == NULL || !strcmp (in_fname, "-"))
@ -1153,7 +1149,7 @@ c_common_post_options (pfilename)
/* Front end initialization common to C, ObjC and C++. */
bool
c_common_init ()
c_common_init (void)
{
input_line = saved_lineno;
@ -1179,13 +1175,12 @@ c_common_init ()
return true;
}
/* A thin wrapper around the real parser that initializes the
/* A thin wrapper around the real parser that initializes the
integrated preprocessor after debug output has been initialized.
Also, make sure the start_source_file debug hook gets called for
the primary source file. */
void
c_common_parse_file (set_yydebug)
int set_yydebug ATTRIBUTE_UNUSED;
c_common_parse_file (int set_yydebug ATTRIBUTE_UNUSED)
{
#if YYDEBUG != 0
yydebug = set_yydebug;
@ -1202,7 +1197,7 @@ c_common_parse_file (set_yydebug)
/* Common finish hook for the C, ObjC and C++ front ends. */
void
c_common_finish ()
c_common_finish (void)
{
FILE *deps_stream = NULL;
@ -1240,7 +1235,7 @@ c_common_finish ()
rather than overwriting it, and like Sun's compiler
SUNPRO_DEPENDENCIES suppresses the dependency on the main file. */
static void
check_deps_environment_vars ()
check_deps_environment_vars (void)
{
char *spec;
@ -1278,7 +1273,7 @@ check_deps_environment_vars ()
/* Handle deferred command line switches. */
static void
handle_deferred_opts ()
handle_deferred_opts (void)
{
size_t i;
@ -1294,7 +1289,7 @@ handle_deferred_opts ()
/* These settings are appropriate for GCC, but not necessarily so for
cpplib as a library. */
static void
sanitize_cpp_opts ()
sanitize_cpp_opts (void)
{
/* If we don't know what style of dependencies to output, complain
if any other dependency switches have been given. */
@ -1326,9 +1321,7 @@ sanitize_cpp_opts ()
/* Add include path with a prefix at the front of its name. */
static void
add_prefixed_path (suffix, chain)
const char *suffix;
size_t chain;
add_prefixed_path (const char *suffix, size_t chain)
{
char *path;
const char *prefix;
@ -1348,7 +1341,7 @@ add_prefixed_path (suffix, chain)
/* Handle -D, -U, -A, -imacros, and the first -include. */
static void
finish_options ()
finish_options (void)
{
if (!cpp_opts->preprocessed)
{
@ -1403,15 +1396,15 @@ finish_options ()
/* Give CPP the next file given by -include, if any. */
static void
push_command_line_include ()
push_command_line_include (void)
{
if (cpp_opts->preprocessed)
return;
while (include_cursor < deferred_count)
{
struct deferred_opt *opt = &deferred_opts[include_cursor++];
if (opt->code == OPT_include && cpp_push_include (parse_in, opt->arg))
return;
}
@ -1428,9 +1421,8 @@ push_command_line_include ()
/* File change callback. Has to handle -include files. */
static void
cb_file_change (pfile, new_map)
cpp_reader *pfile ATTRIBUTE_UNUSED;
const struct line_map *new_map;
cb_file_change (cpp_reader *pfile ATTRIBUTE_UNUSED,
const struct line_map *new_map)
{
if (flag_preprocess_only)
pp_file_change (new_map);
@ -1444,8 +1436,7 @@ cb_file_change (pfile, new_map)
/* Set the C 89 standard (with 1994 amendments if C94, without GNU
extensions if ISO). There is no concept of gnu94. */
static void
set_std_c89 (c94, iso)
int c94, iso;
set_std_c89 (int c94, int iso)
{
cpp_set_lang (parse_in, c94 ? CLK_STDC94: iso ? CLK_STDC89: CLK_GNUC89);
flag_iso = iso;
@ -1460,8 +1451,7 @@ set_std_c89 (c94, iso)
/* Set the C 99 standard (without GNU extensions if ISO). */
static void
set_std_c99 (iso)
int iso;
set_std_c99 (int iso)
{
cpp_set_lang (parse_in, iso ? CLK_STDC99: CLK_GNUC99);
flag_no_asm = iso;
@ -1475,8 +1465,7 @@ set_std_c99 (iso)
/* Set the C++ 98 standard (without GNU extensions if ISO). */
static void
set_std_cxx98 (iso)
int iso;
set_std_cxx98 (int iso)
{
cpp_set_lang (parse_in, iso ? CLK_CXX98: CLK_GNUCXX);
flag_no_gnu_keywords = iso;
@ -1487,8 +1476,7 @@ set_std_cxx98 (iso)
/* Handle setting implicit to ON. */
static void
set_Wimplicit (on)
int on;
set_Wimplicit (int on)
{
warn_implicit = on;
warn_implicit_int = on;
@ -1504,8 +1492,7 @@ set_Wimplicit (on)
/* Args to -d specify what to dump. Silently ignore
unrecognized options; they may be aimed at toplev.c. */
static void
handle_OPT_d (arg)
const char *arg;
handle_OPT_d (const char *arg)
{
char c;
@ -1526,9 +1513,7 @@ handle_OPT_d (arg)
/* Write a slash-separated list of languages in FLAGS to BUF. */
static void
write_langs (buf, flags)
char *buf;
int flags;
write_langs (char *buf, int flags)
{
*buf = '\0';
if (flags & CL_C)
@ -1549,9 +1534,7 @@ write_langs (buf, flags)
/* Complain that switch OPT_INDEX does not apply to this front end. */
static void
complain_wrong_lang (opt_index, on)
size_t opt_index;
int on;
complain_wrong_lang (size_t opt_index, int on)
{
char ok_langs[60], bad_langs[60];
int ok_flags = cl_options[opt_index].flags;
@ -1566,7 +1549,7 @@ complain_wrong_lang (opt_index, on)
/* Handle --help output. */
static void
print_help ()
print_help (void)
{
/* To keep the lines from getting too long for some compilers, limit
to about 500 characters (6 lines) per chunk. */

View File

@ -1,5 +1,5 @@
/* Precompiled header implementation for the C languages.
Copyright (C) 2000, 2002 Free Software Foundation, Inc.
Copyright (C) 2000, 2002, 2003 Free Software Foundation, Inc.
This file is part of GCC.
@ -48,7 +48,7 @@ static FILE *pch_outfile;
static long asm_file_startpos;
static const char * get_ident PARAMS((void));
static const char *get_ident (void);
/* Compute an appropriate 8-byte magic number for the PCH file, so that
utilities like file(1) can identify it, and so that GCC can quickly
@ -56,7 +56,7 @@ static const char * get_ident PARAMS((void));
format. */
static const char *
get_ident()
get_ident(void)
{
static char result[IDENT_LENGTH];
static const char template[IDENT_LENGTH] = "gpch.011";
@ -75,7 +75,7 @@ get_ident()
compilation. */
void
pch_init ()
pch_init (void)
{
FILE *f;
struct c_pch_validity v;
@ -111,7 +111,7 @@ pch_init ()
will produce a PCH file. */
void
c_common_write_pch ()
c_common_write_pch (void)
{
char *buf;
long asm_file_end;
@ -157,10 +157,7 @@ c_common_write_pch ()
in this compilation. */
int
c_common_valid_pch (pfile, name, fd)
cpp_reader *pfile;
const char *name;
int fd;
c_common_valid_pch (cpp_reader *pfile, const char *name, int fd)
{
int sizeread;
int result;
@ -232,11 +229,8 @@ c_common_valid_pch (pfile, name, fd)
by ORIG_NAME. */
void
c_common_read_pch (pfile, name, fd, orig_name)
cpp_reader *pfile;
const char *name;
int fd;
const char *orig_name ATTRIBUTE_UNUSED;
c_common_read_pch (cpp_reader *pfile, const char *name,
int fd, const char *orig_name ATTRIBUTE_UNUSED)
{
FILE *f;
struct c_pch_header h;

View File

@ -40,30 +40,28 @@ static struct
} print;
/* General output routines. */
static void scan_translation_unit PARAMS ((cpp_reader *));
static void scan_translation_unit_trad PARAMS ((cpp_reader *));
static void account_for_newlines PARAMS ((const uchar *, size_t));
static int dump_macro PARAMS ((cpp_reader *, cpp_hashnode *, void *));
static void scan_translation_unit (cpp_reader *);
static void scan_translation_unit_trad (cpp_reader *);
static void account_for_newlines (const uchar *, size_t);
static int dump_macro (cpp_reader *, cpp_hashnode *, void *);
static void print_line PARAMS ((const struct line_map *, unsigned int,
const char *));
static void maybe_print_line PARAMS ((const struct line_map *, unsigned int));
static void print_line (const struct line_map *, unsigned int,
const char *);
static void maybe_print_line (const struct line_map *, unsigned int);
/* Callback routines for the parser. Most of these are active only
in specific modes. */
static void cb_line_change PARAMS ((cpp_reader *, const cpp_token *, int));
static void cb_define PARAMS ((cpp_reader *, unsigned int, cpp_hashnode *));
static void cb_undef PARAMS ((cpp_reader *, unsigned int, cpp_hashnode *));
static void cb_include PARAMS ((cpp_reader *, unsigned int,
const unsigned char *, const char *, int));
static void cb_ident PARAMS ((cpp_reader *, unsigned int,
const cpp_string *));
static void cb_def_pragma PARAMS ((cpp_reader *, unsigned int));
static void cb_line_change (cpp_reader *, const cpp_token *, int);
static void cb_define (cpp_reader *, unsigned int, cpp_hashnode *);
static void cb_undef (cpp_reader *, unsigned int, cpp_hashnode *);
static void cb_include (cpp_reader *, unsigned int, const unsigned char *,
const char *, int);
static void cb_ident (cpp_reader *, unsigned int, const cpp_string *);
static void cb_def_pragma (cpp_reader *, unsigned int);
/* Preprocess and output. */
void
preprocess_file (pfile)
cpp_reader *pfile;
preprocess_file (cpp_reader *pfile)
{
/* A successful cpp_read_main_file guarantees that we can call
cpp_scan_nooutput or cpp_get_token next. */
@ -90,8 +88,7 @@ preprocess_file (pfile)
/* Set up the callbacks as appropriate. */
void
init_pp_output (out_stream)
FILE *out_stream;
init_pp_output (FILE *out_stream)
{
cpp_callbacks *cb = cpp_get_callbacks (parse_in);
@ -129,8 +126,7 @@ init_pp_output (out_stream)
/* Writes out the preprocessed file, handling spacing and paste
avoidance issues. */
static void
scan_translation_unit (pfile)
cpp_reader *pfile;
scan_translation_unit (cpp_reader *pfile)
{
bool avoid_paste = false;
@ -178,9 +174,7 @@ scan_translation_unit (pfile)
/* Adjust print.line for newlines embedded in output. */
static void
account_for_newlines (str, len)
const uchar *str;
size_t len;
account_for_newlines (const uchar *str, size_t len)
{
while (len--)
if (*str++ == '\n')
@ -189,8 +183,7 @@ account_for_newlines (str, len)
/* Writes out a traditionally preprocessed file. */
static void
scan_translation_unit_trad (pfile)
cpp_reader *pfile;
scan_translation_unit_trad (cpp_reader *pfile)
{
while (_cpp_read_logical_line_trad (pfile))
{
@ -207,9 +200,7 @@ scan_translation_unit_trad (pfile)
different line to the current one, output the required newlines or
a line marker, and return 1. Otherwise return 0. */
static void
maybe_print_line (map, line)
const struct line_map *map;
unsigned int line;
maybe_print_line (const struct line_map *map, unsigned int line)
{
/* End the previous line of text. */
if (print.printed)
@ -234,10 +225,7 @@ maybe_print_line (map, line)
/* Output a line marker for logical line LINE. Special flags are "1"
or "2" indicating entering or leaving a file. */
static void
print_line (map, line, special_flags)
const struct line_map *map;
unsigned int line;
const char *special_flags;
print_line (const struct line_map *map, unsigned int line, const char *special_flags)
{
/* End any previous line of text. */
if (print.printed)
@ -272,10 +260,7 @@ print_line (map, line, special_flags)
/* Called when a line of output is started. TOKEN is the first token
of the line, and at end of file will be CPP_EOF. */
static void
cb_line_change (pfile, token, parsing_args)
cpp_reader *pfile;
const cpp_token *token;
int parsing_args;
cb_line_change (cpp_reader *pfile, const cpp_token *token, int parsing_args)
{
if (token->type == CPP_EOF || parsing_args)
return;
@ -303,10 +288,8 @@ cb_line_change (pfile, token, parsing_args)
}
static void
cb_ident (pfile, line, str)
cpp_reader *pfile ATTRIBUTE_UNUSED;
unsigned int line;
const cpp_string * str;
cb_ident (cpp_reader *pfile ATTRIBUTE_UNUSED, unsigned int line,
const cpp_string *str)
{
maybe_print_line (print.map, line);
fprintf (print.outf, "#ident \"%s\"\n", str->text);
@ -314,10 +297,7 @@ cb_ident (pfile, line, str)
}
static void
cb_define (pfile, line, node)
cpp_reader *pfile;
unsigned int line;
cpp_hashnode *node;
cb_define (cpp_reader *pfile, unsigned int line, cpp_hashnode *node)
{
maybe_print_line (print.map, line);
fputs ("#define ", print.outf);
@ -334,10 +314,8 @@ cb_define (pfile, line, node)
}
static void
cb_undef (pfile, line, node)
cpp_reader *pfile ATTRIBUTE_UNUSED;
unsigned int line;
cpp_hashnode *node;
cb_undef (cpp_reader *pfile ATTRIBUTE_UNUSED, unsigned int line,
cpp_hashnode *node)
{
maybe_print_line (print.map, line);
fprintf (print.outf, "#undef %s\n", NODE_NAME (node));
@ -345,12 +323,8 @@ cb_undef (pfile, line, node)
}
static void
cb_include (pfile, line, dir, header, angle_brackets)
cpp_reader *pfile ATTRIBUTE_UNUSED;
unsigned int line;
const unsigned char *dir;
const char *header;
int angle_brackets;
cb_include (cpp_reader *pfile ATTRIBUTE_UNUSED, unsigned int line,
const unsigned char *dir, const char *header, int angle_brackets)
{
maybe_print_line (print.map, line);
if (angle_brackets)
@ -365,8 +339,7 @@ cb_include (pfile, line, dir, header, angle_brackets)
pointing to freed memory, and so must not be dereferenced. */
void
pp_file_change (map)
const struct line_map *map;
pp_file_change (const struct line_map *map)
{
const char *flags = "";
@ -398,9 +371,7 @@ pp_file_change (map)
/* Copy a #pragma directive to the preprocessed output. */
static void
cb_def_pragma (pfile, line)
cpp_reader *pfile;
unsigned int line;
cb_def_pragma (cpp_reader *pfile, unsigned int line)
{
maybe_print_line (print.map, line);
fputs ("#pragma ", print.outf);
@ -410,10 +381,7 @@ cb_def_pragma (pfile, line)
/* Dump out the hash table. */
static int
dump_macro (pfile, node, v)
cpp_reader *pfile;
cpp_hashnode *node;
void *v ATTRIBUTE_UNUSED;
dump_macro (cpp_reader *pfile, cpp_hashnode *node, void *v ATTRIBUTE_UNUSED)
{
if (node->type == NT_MACRO && !(node->flags & NODE_BUILTIN))
{

View File

@ -1,5 +1,5 @@
/* Subroutines common to both C and C++ pretty-printers.
Copyright (C) 2002 Free Software Foundation, Inc.
Copyright (C) 2002, 2003 Free Software Foundation, Inc.
Contributed by Gabriel Dos Reis <gdr@integrable-solutions.net>
This file is part of GCC.
@ -28,55 +28,51 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "c-tree.h"
/* literal */
static void pp_c_char PARAMS ((c_pretty_printer, int));
static void pp_c_character_literal PARAMS ((c_pretty_printer, tree));
static void pp_c_bool_literal PARAMS ((c_pretty_printer, tree));
static bool pp_c_enumerator PARAMS ((c_pretty_printer, tree));
static void pp_c_integer_literal PARAMS ((c_pretty_printer, tree));
static void pp_c_real_literal PARAMS ((c_pretty_printer, tree));
static void pp_c_string_literal PARAMS ((c_pretty_printer, tree));
static void pp_c_char (c_pretty_printer, int);
static void pp_c_character_literal (c_pretty_printer, tree);
static void pp_c_bool_literal (c_pretty_printer, tree);
static bool pp_c_enumerator (c_pretty_printer, tree);
static void pp_c_integer_literal (c_pretty_printer, tree);
static void pp_c_real_literal (c_pretty_printer, tree);
static void pp_c_string_literal (c_pretty_printer, tree);
static void pp_c_primary_expression PARAMS ((c_pretty_printer, tree));
static void pp_c_primary_expression (c_pretty_printer, tree);
/* postfix-expression */
static void pp_c_initializer_list PARAMS ((c_pretty_printer, tree));
static void pp_c_initializer_list (c_pretty_printer, tree);
static void pp_c_unary_expression PARAMS ((c_pretty_printer, tree));
static void pp_c_multiplicative_expression PARAMS ((c_pretty_printer, tree));
static void pp_c_additive_expression PARAMS ((c_pretty_printer, tree));
static void pp_c_shift_expression PARAMS ((c_pretty_printer, tree));
static void pp_c_relational_expression PARAMS ((c_pretty_printer, tree));
static void pp_c_equality_expression PARAMS ((c_pretty_printer, tree));
static void pp_c_and_expression PARAMS ((c_pretty_printer, tree));
static void pp_c_exclusive_or_expression PARAMS ((c_pretty_printer,
tree));
static void pp_c_inclusive_or_expression PARAMS ((c_pretty_printer,
tree));
static void pp_c_logical_and_expression PARAMS ((c_pretty_printer, tree));
static void pp_c_conditional_expression PARAMS ((c_pretty_printer, tree));
static void pp_c_assignment_expression PARAMS ((c_pretty_printer, tree));
static void pp_c_unary_expression (c_pretty_printer, tree);
static void pp_c_multiplicative_expression (c_pretty_printer, tree);
static void pp_c_additive_expression (c_pretty_printer, tree);
static void pp_c_shift_expression (c_pretty_printer, tree);
static void pp_c_relational_expression (c_pretty_printer, tree);
static void pp_c_equality_expression (c_pretty_printer, tree);
static void pp_c_and_expression (c_pretty_printer, tree);
static void pp_c_exclusive_or_expression (c_pretty_printer, tree);
static void pp_c_inclusive_or_expression (c_pretty_printer, tree);
static void pp_c_logical_and_expression (c_pretty_printer, tree);
static void pp_c_conditional_expression (c_pretty_printer, tree);
static void pp_c_assignment_expression (c_pretty_printer, tree);
/* declarations. */
static void pp_c_declaration_specifiers PARAMS ((c_pretty_printer, tree));
static void pp_c_init_declarator PARAMS ((c_pretty_printer, tree));
static void pp_c_declarator PARAMS ((c_pretty_printer, tree));
static void pp_c_direct_declarator PARAMS ((c_pretty_printer, tree));
static void pp_c_abstract_declarator PARAMS ((c_pretty_printer, tree));
static void pp_c_specifier_qualifier_list PARAMS ((c_pretty_printer, tree));
static void pp_c_simple_type_specifier PARAMS ((c_pretty_printer, tree));
static void pp_c_parameter_declaration PARAMS ((c_pretty_printer, tree));
static void pp_c_type_id PARAMS ((c_pretty_printer, tree));
static void pp_c_storage_class_specifier PARAMS ((c_pretty_printer, tree));
static void pp_c_function_specifier PARAMS ((c_pretty_printer, tree));
static void pp_c_declaration_specifiers (c_pretty_printer, tree);
static void pp_c_init_declarator (c_pretty_printer, tree);
static void pp_c_declarator (c_pretty_printer, tree);
static void pp_c_direct_declarator (c_pretty_printer, tree);
static void pp_c_abstract_declarator (c_pretty_printer, tree);
static void pp_c_specifier_qualifier_list (c_pretty_printer, tree);
static void pp_c_simple_type_specifier (c_pretty_printer, tree);
static void pp_c_parameter_declaration (c_pretty_printer, tree);
static void pp_c_type_id (c_pretty_printer, tree);
static void pp_c_storage_class_specifier (c_pretty_printer, tree);
static void pp_c_function_specifier (c_pretty_printer, tree);
/* Declarations. */
/* Print out CV-qualifiers. Take care of possible extensions. */
void
pp_c_cv_qualifier (ppi, cv)
c_pretty_printer ppi;
int cv;
pp_c_cv_qualifier (c_pretty_printer ppi, int cv)
{
if (cv & TYPE_QUAL_CONST)
pp_c_identifier (ppi, "const");
@ -87,9 +83,7 @@ pp_c_cv_qualifier (ppi, cv)
}
static void
pp_c_simple_type_specifier (ppi, t)
c_pretty_printer ppi;
tree t;
pp_c_simple_type_specifier (c_pretty_printer ppi, tree t)
{
const enum tree_code code = TREE_CODE (t);
switch (code)
@ -107,7 +101,7 @@ pp_c_simple_type_specifier (ppi, t)
case IDENTIFIER_NODE:
pp_c_tree_identifier (ppi, t);
break;
case VOID_TYPE:
case BOOLEAN_TYPE:
case CHAR_TYPE:
@ -115,7 +109,7 @@ pp_c_simple_type_specifier (ppi, t)
case REAL_TYPE:
pp_c_tree_identifier (ppi, DECL_NAME (t));
break;
case COMPLEX_TYPE:
case VECTOR_TYPE:
pp_c_simple_type_specifier (ppi, TYPE_MAIN_VARIANT (TREE_TYPE (t)));
@ -143,7 +137,7 @@ pp_c_simple_type_specifier (ppi, t)
pp_c_identifier (ppi, "enum");
else
pp_c_identifier (ppi, "<tag-error>");
if (TYPE_NAME (t))
pp_c_tree_identifier (ppi, TYPE_NAME (t));
else
@ -156,36 +150,28 @@ pp_c_simple_type_specifier (ppi, t)
}
static inline void
pp_c_specifier_qualifier_list (ppi, t)
c_pretty_printer ppi;
tree t;
pp_c_specifier_qualifier_list (c_pretty_printer ppi, tree t)
{
pp_c_simple_type_specifier (ppi, TYPE_MAIN_VARIANT (TREE_TYPE (t)));
pp_c_cv_qualifier (ppi, TYPE_QUALS (t));
}
static void
pp_c_abstract_declarator (ppi, t)
c_pretty_printer ppi;
tree t;
pp_c_abstract_declarator (c_pretty_printer ppi, tree t)
{
pp_unsupported_tree (ppi, t);
}
static inline void
pp_c_type_id (ppi, t)
c_pretty_printer ppi;
tree t;
pp_c_type_id (c_pretty_printer ppi, tree t)
{
pp_c_specifier_qualifier_list (ppi, t);
pp_c_abstract_declarator (ppi, t);
}
static inline void
pp_c_storage_class_specifier (pp, t)
c_pretty_printer pp;
tree t;
pp_c_storage_class_specifier (c_pretty_printer pp, tree t)
{
if (TREE_CODE (t) == TYPE_DECL)
pp_c_identifier (pp, "typedef");
@ -194,18 +180,14 @@ pp_c_storage_class_specifier (pp, t)
}
static inline void
pp_c_function_specifier (pp, t)
c_pretty_printer pp;
tree t;
pp_c_function_specifier (c_pretty_printer pp, tree t)
{
if (TREE_CODE (t) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (t))
pp_c_identifier (pp, "inline");
}
static inline void
pp_c_declaration_specifiers (pp, t)
c_pretty_printer pp;
tree t;
pp_c_declaration_specifiers (c_pretty_printer pp, tree t)
{
pp_c_storage_class_specifier (pp, t);
pp_c_function_specifier (pp, t);
@ -214,25 +196,19 @@ pp_c_declaration_specifiers (pp, t)
}
static inline void
pp_c_direct_declarator (pp, t)
c_pretty_printer pp;
tree t;
pp_c_direct_declarator (c_pretty_printer pp, tree t)
{
pp_unsupported_tree (pp, t);
}
static inline void
pp_c_declarator (pp, t)
c_pretty_printer pp;
tree t;
pp_c_declarator (c_pretty_printer pp, tree t)
{
pp_unsupported_tree (pp, t);
}
static inline void
pp_c_init_declarator (pp, t)
c_pretty_printer pp;
tree t;
pp_c_init_declarator (c_pretty_printer pp, tree t)
{
pp_declarator (pp, t);
if (DECL_INITIAL (t))
@ -245,33 +221,27 @@ pp_c_init_declarator (pp, t)
}
void
pp_c_declaration (pp, t)
c_pretty_printer pp;
tree t;
pp_c_declaration (c_pretty_printer pp, tree t)
{
pp_declaration_specifiers (pp, t);
pp_c_init_declarator (pp, t);
}
static void
pp_c_parameter_declaration (pp, t)
c_pretty_printer pp;
tree t;
pp_c_parameter_declaration (c_pretty_printer pp, tree t)
{
pp_unsupported_tree (pp, t);
}
/* Pretty-print ATTRIBUTES using GNU C extension syntax. */
void
pp_c_attributes (pp, attributes)
c_pretty_printer pp;
tree attributes;
void
pp_c_attributes (c_pretty_printer pp, tree attributes)
{
if (attributes == NULL_TREE)
return;
pp_c_identifier (pp, "__attribute__");
pp_c_left_paren (pp);
pp_c_left_paren (pp);
pp_c_left_paren (pp);
for (; attributes != NULL_TREE; attributes = TREE_CHAIN (attributes))
{
@ -282,7 +252,7 @@ pp_c_attributes (pp, attributes)
pp_c_expression_list (pp, TREE_VALUE (attributes));
pp_c_right_paren (pp);
}
if (TREE_CHAIN (attributes))
pp_separate_with (pp, ',');
}
@ -295,9 +265,7 @@ pp_c_attributes (pp, attributes)
/* Print out a c-char. */
static void
pp_c_char (ppi, c)
c_pretty_printer ppi;
int c;
pp_c_char (c_pretty_printer ppi, int c)
{
switch (c)
{
@ -342,9 +310,7 @@ pp_c_char (ppi, c)
/* Print out a STRING literal. */
static inline void
pp_c_string_literal (ppi, s)
c_pretty_printer ppi;
tree s;
pp_c_string_literal (c_pretty_printer ppi, tree s)
{
const char *p = TREE_STRING_POINTER (s);
int n = TREE_STRING_LENGTH (s) - 1;
@ -357,9 +323,7 @@ pp_c_string_literal (ppi, s)
/* Print out a CHARACTER literal. */
static inline void
pp_c_character_literal (ppi, c)
c_pretty_printer ppi;
tree c;
pp_c_character_literal (c_pretty_printer ppi, tree c)
{
pp_quote (ppi);
pp_c_char (ppi, tree_low_cst (c, 0));
@ -368,9 +332,7 @@ pp_c_character_literal (ppi, c)
/* Print out a BOOLEAN literal. */
static inline void
pp_c_bool_literal (ppi, b)
c_pretty_printer ppi;
tree b;
pp_c_bool_literal (c_pretty_printer ppi, tree b)
{
if (b == boolean_false_node || integer_zerop (b))
{
@ -394,24 +356,22 @@ pp_c_bool_literal (ppi, b)
pp_unsupported_tree (ppi, b);
}
/* Attempt to print out an ENUMERATOR. Return true on success. Else return
/* Attempt to print out an ENUMERATOR. Return true on success. Else return
false; that means the value was obtained by a cast, in which case
print out the type-id part of the cast-expression -- the casted value
is then printed by pp_c_integer_literal. */
static bool
pp_c_enumerator (ppi, e)
c_pretty_printer ppi;
tree e;
pp_c_enumerator (c_pretty_printer ppi, tree e)
{
tree type = TREE_TYPE (e);
tree value;
/* Find the name of this constant. */
for (value = TYPE_VALUES (type);
for (value = TYPE_VALUES (type);
value != NULL_TREE && !tree_int_cst_equal (TREE_VALUE (value), e);
value = TREE_CHAIN (value))
;
if (value != NULL_TREE)
pp_c_tree_identifier (ppi, TREE_PURPOSE (value));
else
@ -422,18 +382,16 @@ pp_c_enumerator (ppi, e)
pp_c_right_paren (ppi);
return false;
}
return true;
}
/* Print out an INTEGER constant value. */
static void
pp_c_integer_literal (ppi, i)
c_pretty_printer ppi;
tree i;
pp_c_integer_literal (c_pretty_printer ppi, tree i)
{
tree type = TREE_TYPE (i);
if (type == boolean_type_node)
pp_c_bool_literal (ppi, i);
else if (type == char_type_node)
@ -453,7 +411,7 @@ pp_c_integer_literal (ppi, i)
i = build_int_2 (-TREE_INT_CST_LOW (i),
~TREE_INT_CST_HIGH (i) + !TREE_INT_CST_LOW (i));
sprintf (pp_buffer (ppi)->digit_buffer,
HOST_WIDE_INT_PRINT_DOUBLE_HEX,
HOST_WIDE_INT_PRINT_DOUBLE_HEX,
TREE_INT_CST_HIGH (i), TREE_INT_CST_LOW (i));
pp_identifier (ppi, pp_buffer (ppi)->digit_buffer);
@ -464,9 +422,7 @@ pp_c_integer_literal (ppi, i)
/* Print out a REAL value. */
static inline void
pp_c_real_literal (ppi, r)
c_pretty_printer ppi;
tree r;
pp_c_real_literal (c_pretty_printer ppi, tree r)
{
real_to_decimal (pp_buffer (ppi)->digit_buffer, &TREE_REAL_CST (r),
sizeof (pp_buffer (ppi)->digit_buffer), 0, 1);
@ -475,23 +431,21 @@ pp_c_real_literal (ppi, r)
void
pp_c_literal (ppi, e)
c_pretty_printer ppi;
tree e;
pp_c_literal (c_pretty_printer ppi, tree e)
{
switch (TREE_CODE (e))
{
case INTEGER_CST:
pp_c_integer_literal (ppi, e);
break;
case REAL_CST:
pp_c_real_literal (ppi, e);
break;
case STRING_CST:
pp_c_string_literal (ppi, e);
break;
break;
default:
pp_unsupported_tree (ppi, e);
@ -501,9 +455,7 @@ pp_c_literal (ppi, e)
/* Pretty-print a C primary-expression. */
static void
pp_c_primary_expression (ppi, e)
c_pretty_printer ppi;
tree e;
pp_c_primary_expression (c_pretty_printer ppi, tree e)
{
switch (TREE_CODE (e))
{
@ -522,7 +474,7 @@ pp_c_primary_expression (ppi, e)
case ERROR_MARK:
pp_c_identifier (ppi, "<erroneous-expression>");
break;
case RESULT_DECL:
pp_c_identifier (ppi, "<return-value>");
break;
@ -566,9 +518,7 @@ pp_c_primary_expression (ppi, e)
/* Print out a C initializer -- also support C compound-literals. */
void
pp_c_initializer (ppi, e)
c_pretty_printer ppi;
tree e;
pp_c_initializer (c_pretty_printer ppi, tree e)
{
if (TREE_CODE (e) == CONSTRUCTOR)
{
@ -587,9 +537,7 @@ pp_c_initializer (ppi, e)
}
static void
pp_c_initializer_list (ppi, e)
c_pretty_printer ppi;
tree e;
pp_c_initializer_list (c_pretty_printer ppi, tree e)
{
tree type = TREE_TYPE (e);
const enum tree_code code = TREE_CODE (type);
@ -624,9 +572,7 @@ pp_c_initializer_list (ppi, e)
}
void
pp_c_postfix_expression (ppi, e)
c_pretty_printer ppi;
tree e;
pp_c_postfix_expression (c_pretty_printer ppi, tree e)
{
enum tree_code code = TREE_CODE (e);
switch (code)
@ -636,7 +582,7 @@ pp_c_postfix_expression (ppi, e)
pp_postfix_expression (ppi, TREE_OPERAND (e, 0));
pp_identifier (ppi, code == POSTINCREMENT_EXPR ? "++" : "--");
break;
case ARROW_EXPR:
pp_postfix_expression (ppi, TREE_OPERAND (e, 0));
pp_arrow (ppi);
@ -658,7 +604,7 @@ pp_c_postfix_expression (ppi, e)
case ABS_EXPR:
case FFS_EXPR:
pp_c_identifier (ppi,
pp_c_identifier (ppi,
code == ABS_EXPR ? "__builtin_abs" : "__builtin_ffs");
pp_c_left_paren (ppi);
pp_c_expression (ppi, TREE_OPERAND (e, 0));
@ -689,7 +635,7 @@ pp_c_postfix_expression (ppi, e)
pp_type_id (ppi, TREE_TYPE (e));
pp_c_right_paren (ppi);
pp_left_brace (ppi);
if (code == COMPLEX_CST)
{
pp_c_expression (ppi, TREE_REALPART (e));
@ -704,7 +650,7 @@ pp_c_postfix_expression (ppi, e)
pp_separate_with (ppi, ',');
pp_c_expression (ppi, TREE_OPERAND (e, 1));
}
pp_right_brace (ppi);
break;
@ -714,7 +660,7 @@ pp_c_postfix_expression (ppi, e)
case CONSTRUCTOR:
pp_initializer (ppi, e);
break;
case VA_ARG_EXPR:
pp_c_identifier (ppi, "__builtin_va_arg");
pp_c_left_paren (ppi);
@ -732,9 +678,7 @@ pp_c_postfix_expression (ppi, e)
/* Print out an expression-list; E is expected to be a TREE_LIST */
void
pp_c_expression_list (ppi, e)
c_pretty_printer ppi;
tree e;
pp_c_expression_list (c_pretty_printer ppi, tree e)
{
for (; e != NULL_TREE; e = TREE_CHAIN (e))
{
@ -745,9 +689,7 @@ pp_c_expression_list (ppi, e)
}
static void
pp_c_unary_expression (ppi, e)
c_pretty_printer ppi;
tree e;
pp_c_unary_expression (c_pretty_printer ppi, tree e)
{
enum tree_code code = TREE_CODE (e);
switch (code)
@ -757,7 +699,7 @@ pp_c_unary_expression (ppi, e)
pp_identifier (ppi, code == PREINCREMENT_EXPR ? "++" : "--");
pp_c_unary_expression (ppi, TREE_OPERAND (e, 0));
break;
case ADDR_EXPR:
case INDIRECT_REF:
case CONVERT_EXPR:
@ -798,7 +740,7 @@ pp_c_unary_expression (ppi, e)
pp_c_whitespace (ppi);
pp_unary_expression (ppi, TREE_OPERAND (e, 0));
break;
default:
pp_postfix_expression (ppi, e);
break;
@ -806,9 +748,7 @@ pp_c_unary_expression (ppi, e)
}
void
pp_c_cast_expression (ppi, e)
c_pretty_printer ppi;
tree e;
pp_c_cast_expression (c_pretty_printer ppi, tree e)
{
if (TREE_CODE (e) == CONVERT_EXPR || TREE_CODE (e) == FLOAT_EXPR)
{
@ -822,9 +762,7 @@ pp_c_cast_expression (ppi, e)
}
static void
pp_c_multiplicative_expression (ppi, e)
c_pretty_printer ppi;
tree e;
pp_c_multiplicative_expression (c_pretty_printer ppi, tree e)
{
enum tree_code code = TREE_CODE (e);
switch (code)
@ -851,9 +789,7 @@ pp_c_multiplicative_expression (ppi, e)
}
static inline void
pp_c_additive_expression (ppi, e)
c_pretty_printer ppi;
tree e;
pp_c_additive_expression (c_pretty_printer ppi, tree e)
{
enum tree_code code = TREE_CODE (e);
switch (code)
@ -877,9 +813,7 @@ pp_c_additive_expression (ppi, e)
}
static inline void
pp_c_shift_expression (ppi, e)
c_pretty_printer ppi;
tree e;
pp_c_shift_expression (c_pretty_printer ppi, tree e)
{
enum tree_code code = TREE_CODE (e);
switch (code)
@ -899,9 +833,7 @@ pp_c_shift_expression (ppi, e)
}
static void
pp_c_relational_expression (ppi, e)
c_pretty_printer ppi;
tree e;
pp_c_relational_expression (c_pretty_printer ppi, tree e)
{
enum tree_code code = TREE_CODE (e);
switch (code)
@ -931,9 +863,7 @@ pp_c_relational_expression (ppi, e)
}
static inline void
pp_c_equality_expression (ppi, e)
c_pretty_printer ppi;
tree e;
pp_c_equality_expression (c_pretty_printer ppi, tree e)
{
enum tree_code code = TREE_CODE (e);
switch (code)
@ -945,8 +875,8 @@ pp_c_equality_expression (ppi, e)
pp_identifier (ppi, code == EQ_EXPR ? "==" : "!=");
pp_c_whitespace (ppi);
pp_c_relational_expression (ppi, TREE_OPERAND (e, 1));
break;
break;
default:
pp_c_relational_expression (ppi, e);
break;
@ -954,9 +884,7 @@ pp_c_equality_expression (ppi, e)
}
static inline void
pp_c_and_expression (ppi, e)
c_pretty_printer ppi;
tree e;
pp_c_and_expression (c_pretty_printer ppi, tree e)
{
if (TREE_CODE (e) == BIT_AND_EXPR)
{
@ -971,9 +899,7 @@ pp_c_and_expression (ppi, e)
}
static inline void
pp_c_exclusive_or_expression (ppi, e)
c_pretty_printer ppi;
tree e;
pp_c_exclusive_or_expression (c_pretty_printer ppi, tree e)
{
if (TREE_CODE (e) == BIT_XOR_EXPR)
{
@ -988,9 +914,7 @@ pp_c_exclusive_or_expression (ppi, e)
}
static inline void
pp_c_inclusive_or_expression (ppi, e)
c_pretty_printer ppi;
tree e;
pp_c_inclusive_or_expression (c_pretty_printer ppi, tree e)
{
if (TREE_CODE (e) == BIT_IOR_EXPR)
{
@ -1005,9 +929,7 @@ pp_c_inclusive_or_expression (ppi, e)
}
static inline void
pp_c_logical_and_expression (ppi, e)
c_pretty_printer ppi;
tree e;
pp_c_logical_and_expression (c_pretty_printer ppi, tree e)
{
if (TREE_CODE (e) == TRUTH_ANDIF_EXPR)
{
@ -1022,9 +944,7 @@ pp_c_logical_and_expression (ppi, e)
}
void
pp_c_logical_or_expression (ppi, e)
c_pretty_printer ppi;
tree e;
pp_c_logical_or_expression (c_pretty_printer ppi, tree e)
{
if (TREE_CODE (e) == TRUTH_ORIF_EXPR)
{
@ -1039,9 +959,7 @@ pp_c_logical_or_expression (ppi, e)
}
static void
pp_c_conditional_expression (ppi, e)
c_pretty_printer ppi;
tree e;
pp_c_conditional_expression (c_pretty_printer ppi, tree e)
{
if (TREE_CODE (e) == COND_EXPR)
{
@ -1062,9 +980,7 @@ pp_c_conditional_expression (ppi, e)
/* Pretty-print a C assignment-expression. */
static void
pp_c_assignment_expression (ppi, e)
c_pretty_printer ppi;
tree e;
pp_c_assignment_expression (c_pretty_printer ppi, tree e)
{
if (TREE_CODE (e) == MODIFY_EXPR || TREE_CODE (e) == INIT_EXPR)
{
@ -1080,16 +996,14 @@ pp_c_assignment_expression (ppi, e)
/* Pretty-print an expression. */
void
pp_c_expression (ppi, e)
c_pretty_printer ppi;
tree e;
pp_c_expression (c_pretty_printer ppi, tree e)
{
switch (TREE_CODE (e))
{
case INTEGER_CST:
pp_c_integer_literal (ppi, e);
break;
case REAL_CST:
pp_c_real_literal (ppi, e);
break;
@ -1097,7 +1011,7 @@ pp_c_expression (ppi, e)
case STRING_CST:
pp_c_string_literal (ppi, e);
break;
case FUNCTION_DECL:
case VAR_DECL:
case CONST_DECL:
@ -1206,7 +1120,7 @@ pp_c_expression (ppi, e)
pp_assignment_expression (ppi, TREE_OPERAND (e, 1));
pp_c_right_paren (ppi);
break;
default:
pp_unsupported_tree (ppi, e);
@ -1217,9 +1131,7 @@ pp_c_expression (ppi, e)
/* Statements. */
void
pp_c_statement (ppi, stmt)
c_pretty_printer ppi;
tree stmt;
pp_c_statement (c_pretty_printer ppi, tree stmt)
{
const enum tree_code code = TREE_CODE (stmt);
switch (code)
@ -1262,7 +1174,7 @@ pp_c_statement (ppi, stmt)
case EXPR_STMT:
case CLEANUP_STMT:
pp_newline (ppi);
pp_c_expression (ppi, code == EXPR_STMT
pp_c_expression (ppi, code == EXPR_STMT
? EXPR_STMT_EXPR (stmt)
: CLEANUP_EXPR (stmt));
pp_semicolon (ppi);
@ -1346,7 +1258,7 @@ pp_c_statement (ppi, stmt)
pp_statement (ppi, FOR_BODY (stmt));
pp_newline_and_indent (ppi, -3);
break;
case BREAK_STMT:
case CONTINUE_STMT:
pp_newline (ppi);
@ -1358,7 +1270,7 @@ pp_c_statement (ppi, stmt)
case RETURN_STMT:
case GOTO_STMT:
{
tree e = code == RETURN_STMT
tree e = code == RETURN_STMT
? RETURN_STMT_EXPR (stmt)
: GOTO_DESTINATION (stmt);
@ -1396,7 +1308,7 @@ pp_c_statement (ppi, stmt)
case ASM_STMT:
{
bool has_volatile_p = ASM_VOLATILE_P (stmt);
bool is_extended = has_volatile_p || ASM_INPUTS (stmt)
bool is_extended = has_volatile_p || ASM_INPUTS (stmt)
|| ASM_OUTPUTS (stmt) || ASM_CLOBBERS (stmt);
pp_c_identifier (ppi, is_extended ? "__asm__" : "asm");
if (has_volatile_p)
@ -1443,8 +1355,7 @@ pp_c_statement (ppi, stmt)
/* Initialize the PRETTY-PRINTER for handling C codes. */
void
pp_c_pretty_printer_init (pp)
c_pretty_printer pp;
pp_c_pretty_printer_init (c_pretty_printer pp)
{
pp->offset_list = 0;

View File

@ -1,5 +1,5 @@
/* Various declarations for the C and C++ pretty-printers.
Copyright (C) 2002 Free Software Foundation, Inc.
Copyright (C) 2002, 2003 Free Software Foundation, Inc.
Contributed by Gabriel Dos Reis <gdr@integrable-solutions.net>
This file is part of GCC.
@ -32,7 +32,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
typedef struct c_pretty_print_info *c_pretty_printer;
/* The type of a C pretty-printer 'member' function. */
typedef void (*c_pretty_print_fn) PARAMS ((c_pretty_printer, tree));
typedef void (*c_pretty_print_fn) (c_pretty_printer, tree);
struct c_pretty_print_info
{
@ -144,22 +144,22 @@ struct c_pretty_print_info
macro must be overridden by any subclass of c_pretty_print_info. */
#define pp_c_base(PP) (PP)
extern void pp_c_pretty_printer_init PARAMS ((c_pretty_printer));
extern void pp_c_pretty_printer_init (c_pretty_printer);
/* Declarations. */
void pp_c_attributes PARAMS ((c_pretty_printer, tree));
void pp_c_cv_qualifier PARAMS ((c_pretty_printer, int));
void pp_c_parameter_declaration_clause PARAMS ((c_pretty_printer, tree));
void pp_c_declaration PARAMS ((c_pretty_printer, tree));
void pp_c_attributes (c_pretty_printer, tree);
void pp_c_cv_qualifier (c_pretty_printer, int);
void pp_c_parameter_declaration_clause (c_pretty_printer, tree);
void pp_c_declaration (c_pretty_printer, tree);
/* Statements. */
void pp_c_statement PARAMS ((c_pretty_printer, tree));
void pp_c_statement (c_pretty_printer, tree);
/* Expressions. */
void pp_c_expression PARAMS ((c_pretty_printer, tree));
void pp_c_logical_or_expression PARAMS ((c_pretty_printer, tree));
void pp_c_expression_list PARAMS ((c_pretty_printer, tree));
void pp_c_cast_expression PARAMS ((c_pretty_printer, tree));
void pp_c_postfix_expression PARAMS ((c_pretty_printer, tree));
void pp_c_initializer PARAMS ((c_pretty_printer, tree));
void pp_c_literal PARAMS ((c_pretty_printer, tree));
void pp_c_expression (c_pretty_printer, tree);
void pp_c_logical_or_expression (c_pretty_printer, tree);
void pp_c_expression_list (c_pretty_printer, tree);
void pp_c_cast_expression (c_pretty_printer, tree);
void pp_c_postfix_expression (c_pretty_printer, tree);
void pp_c_initializer (c_pretty_printer, tree);
void pp_c_literal (c_pretty_printer, tree);
#endif /* GCC_C_PRETTY_PRINTER */

View File

@ -1,6 +1,6 @@
/* This file contains the definitions and documentation for the common
tree codes used in the GNU C and C++ compilers (see c-common.def
for the standard codes).
for the standard codes).
Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
Written by Benjamin Chelf (chelf@codesourcery.com).
@ -43,26 +43,25 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
/* If non-NULL, the address of a language-specific function for
expanding statements. */
void (*lang_expand_stmt) PARAMS ((tree));
void (*lang_expand_stmt) (tree);
/* If non-NULL, the address of a language-specific function for
expanding a DECL_STMT. After the language-independent cases are
handled, this function will be called. If this function is not
defined, it is assumed that declarations other than those for
variables and labels do not require any RTL generation. */
void (*lang_expand_decl_stmt) PARAMS ((tree));
void (*lang_expand_decl_stmt) (tree);
static tree find_reachable_label_1 PARAMS ((tree *, int *, void *));
static tree find_reachable_label PARAMS ((tree));
static bool expand_unreachable_if_stmt PARAMS ((tree));
static tree expand_unreachable_stmt PARAMS ((tree, int));
static void genrtl_do_stmt_1 PARAMS ((tree, tree));
static tree find_reachable_label_1 (tree *, int *, void *);
static tree find_reachable_label (tree);
static bool expand_unreachable_if_stmt (tree);
static tree expand_unreachable_stmt (tree, int);
static void genrtl_do_stmt_1 (tree, tree);
/* Create an empty statement tree rooted at T. */
void
begin_stmt_tree (t)
tree *t;
begin_stmt_tree (tree *t)
{
/* We create a trivial EXPR_STMT so that last_tree is never NULL in
what follows. We remove the extraneous statement in
@ -76,8 +75,7 @@ begin_stmt_tree (t)
/* T is a statement. Add it to the statement-tree. */
tree
add_stmt (t)
tree t;
add_stmt (tree t)
{
if (input_filename != last_expr_filename)
{
@ -95,7 +93,7 @@ add_stmt (t)
/* Add T to the statement-tree. */
TREE_CHAIN (last_tree) = t;
last_tree = t;
/* When we expand a statement-tree, we must know whether or not the
statements are full-expressions. We record that fact here. */
STMT_IS_FULL_EXPR_P (last_tree) = stmts_are_full_exprs_p ();
@ -111,14 +109,13 @@ add_stmt (t)
DECL. */
void
add_decl_stmt (decl)
tree decl;
add_decl_stmt (tree decl)
{
tree decl_stmt;
/* We need the type to last until instantiation time. */
decl_stmt = build_stmt (DECL_STMT, decl);
add_stmt (decl_stmt);
add_stmt (decl_stmt);
}
/* Add a scope-statement to the statement-tree. BEGIN_P indicates
@ -132,9 +129,7 @@ add_decl_stmt (decl)
SCOPE_BEGIN_P set. */
tree
add_scope_stmt (begin_p, partial_p)
int begin_p;
int partial_p;
add_scope_stmt (int begin_p, int partial_p)
{
tree *stack_ptr = current_scope_stmt_stack ();
tree ss;
@ -168,11 +163,10 @@ add_scope_stmt (begin_p, partial_p)
/* Finish the statement tree rooted at T. */
void
finish_stmt_tree (t)
tree *t;
finish_stmt_tree (tree *t)
{
tree stmt;
/* Remove the fake extra statement added in begin_stmt_tree. */
stmt = TREE_CHAIN (*t);
*t = stmt;
@ -200,7 +194,7 @@ build_stmt (enum tree_code code, ...)
int length;
int i;
va_list p;
va_start (p, code);
t = make_node (code);
@ -220,23 +214,21 @@ build_stmt (enum tree_code code, ...)
as the condition is returned. Otherwise, T itself is returned. */
tree
expand_cond (t)
tree t;
expand_cond (tree t)
{
if (t && TREE_CODE (t) == TREE_LIST)
{
expand_stmt (TREE_PURPOSE (t));
return TREE_VALUE (t);
}
else
else
return t;
}
/* Create RTL for the local static variable DECL. */
void
make_rtl_for_local_static (decl)
tree decl;
make_rtl_for_local_static (tree decl)
{
const char *asmspec = NULL;
@ -271,8 +263,7 @@ make_rtl_for_local_static (decl)
/* Let the back-end know about DECL. */
void
emit_local_var (decl)
tree decl;
emit_local_var (tree decl)
{
/* Create RTL for this variable. */
if (!DECL_RTL_SET_P (decl))
@ -303,7 +294,7 @@ emit_local_var (decl)
/* Helper for generating the RTL at the beginning of a scope. */
void
genrtl_do_pushlevel ()
genrtl_do_pushlevel (void)
{
emit_line_note (input_filename, input_line);
clear_last_expr ();
@ -312,23 +303,22 @@ genrtl_do_pushlevel ()
/* Generate the RTL for DESTINATION, which is a GOTO_STMT. */
void
genrtl_goto_stmt (destination)
tree destination;
genrtl_goto_stmt (tree destination)
{
if (TREE_CODE (destination) == IDENTIFIER_NODE)
abort ();
/* We warn about unused labels with -Wunused. That means we have to
mark the used labels as used. */
if (TREE_CODE (destination) == LABEL_DECL)
TREE_USED (destination) = 1;
emit_line_note (input_filename, input_line);
if (TREE_CODE (destination) == LABEL_DECL)
{
label_rtx (destination);
expand_goto (destination);
expand_goto (destination);
}
else
expand_computed_goto (destination);
@ -339,8 +329,7 @@ genrtl_goto_stmt (destination)
used for new code. */
void
genrtl_expr_stmt (expr)
tree expr;
genrtl_expr_stmt (tree expr)
{
genrtl_expr_stmt_value (expr, -1, 1);
}
@ -352,21 +341,19 @@ genrtl_expr_stmt (expr)
MAYBE_LAST is nonzero if this EXPR_STMT might be the last statement
in expression statement. */
void
genrtl_expr_stmt_value (expr, want_value, maybe_last)
tree expr;
int want_value, maybe_last;
void
genrtl_expr_stmt_value (tree expr, int want_value, int maybe_last)
{
if (expr != NULL_TREE)
{
emit_line_note (input_filename, input_line);
if (stmts_are_full_exprs_p ())
expand_start_target_temps ();
if (expr != error_mark_node)
expand_expr_stmt_value (expr, want_value, maybe_last);
if (stmts_are_full_exprs_p ())
expand_end_target_temps ();
}
@ -375,8 +362,7 @@ genrtl_expr_stmt_value (expr, want_value, maybe_last)
/* Generate the RTL for T, which is a DECL_STMT. */
void
genrtl_decl_stmt (t)
tree t;
genrtl_decl_stmt (tree t)
{
tree decl;
emit_line_note (input_filename, input_line);
@ -387,7 +373,7 @@ genrtl_decl_stmt (t)
`extern'). We don't have to handle the initialization
of those objects here; they can only be declarations,
rather than definitions. */
if (TREE_CODE (decl) == VAR_DECL
if (TREE_CODE (decl) == VAR_DECL
&& !TREE_STATIC (decl)
&& !DECL_EXTERNAL (decl))
{
@ -395,12 +381,12 @@ genrtl_decl_stmt (t)
if (!anon_aggr_type_p (TREE_TYPE (decl)))
emit_local_var (decl);
else
expand_anon_union_decl (decl, NULL_TREE,
expand_anon_union_decl (decl, NULL_TREE,
DECL_ANON_UNION_ELEMS (decl));
}
else if (TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl))
make_rtl_for_local_static (decl);
else if (TREE_CODE (decl) == LABEL_DECL
else if (TREE_CODE (decl) == LABEL_DECL
&& C_DECLARED_LABEL_FLAG (decl))
declare_nonlocal_label (decl);
else if (lang_expand_decl_stmt)
@ -410,8 +396,7 @@ genrtl_decl_stmt (t)
/* Generate the RTL for T, which is an IF_STMT. */
void
genrtl_if_stmt (t)
tree t;
genrtl_if_stmt (tree t)
{
tree cond;
genrtl_do_pushlevel ();
@ -421,7 +406,7 @@ genrtl_if_stmt (t)
if (THEN_CLAUSE (t))
{
tree nextt = THEN_CLAUSE (t);
if (cond && integer_zerop (cond))
nextt = expand_unreachable_stmt (nextt, warn_notreached);
expand_stmt (nextt);
@ -441,14 +426,13 @@ genrtl_if_stmt (t)
/* Generate the RTL for T, which is a WHILE_STMT. */
void
genrtl_while_stmt (t)
tree t;
genrtl_while_stmt (tree t)
{
tree cond = WHILE_COND (t);
emit_nop ();
emit_line_note (input_filename, input_line);
expand_start_loop (1);
expand_start_loop (1);
genrtl_do_pushlevel ();
if (cond && !integer_nonzerop (cond))
@ -458,7 +442,7 @@ genrtl_while_stmt (t)
expand_exit_loop_top_cond (0, cond);
genrtl_do_pushlevel ();
}
expand_stmt (WHILE_BODY (t));
expand_end_loop ();
@ -468,8 +452,7 @@ genrtl_while_stmt (t)
body. This is reused for expanding unreachable WHILE_STMTS. */
static void
genrtl_do_stmt_1 (cond, body)
tree cond, body;
genrtl_do_stmt_1 (tree cond, tree body)
{
/* Recognize the common special-case of do { ... } while (0) and do
not emit the loop widgetry in this case. In particular this
@ -512,8 +495,7 @@ genrtl_do_stmt_1 (cond, body)
/* Generate the RTL for T, which is a DO_STMT. */
void
genrtl_do_stmt (t)
tree t;
genrtl_do_stmt (tree t)
{
genrtl_do_stmt_1 (DO_COND (t), DO_BODY (t));
}
@ -521,8 +503,7 @@ genrtl_do_stmt (t)
/* Build the node for a return statement and return it. */
tree
build_return_stmt (expr)
tree expr;
build_return_stmt (tree expr)
{
return (build_stmt (RETURN_STMT, expr));
}
@ -530,8 +511,7 @@ build_return_stmt (expr)
/* Generate the RTL for STMT, which is a RETURN_STMT. */
void
genrtl_return_stmt (stmt)
tree stmt;
genrtl_return_stmt (tree stmt)
{
tree expr;
@ -551,8 +531,7 @@ genrtl_return_stmt (stmt)
/* Generate the RTL for T, which is a FOR_STMT. */
void
genrtl_for_stmt (t)
tree t;
genrtl_for_stmt (tree t)
{
tree cond = FOR_COND (t);
location_t saved_loc;
@ -566,7 +545,7 @@ genrtl_for_stmt (t)
emit_nop ();
emit_line_note (input_filename, input_line);
if (FOR_EXPR (t))
expand_start_loop_continue_elsewhere (1);
expand_start_loop_continue_elsewhere (1);
else
expand_start_loop (1);
genrtl_do_pushlevel ();
@ -601,7 +580,7 @@ genrtl_for_stmt (t)
/* Build a break statement node and return it. */
tree
build_break_stmt ()
build_break_stmt (void)
{
return (build_stmt (BREAK_STMT));
}
@ -609,7 +588,7 @@ build_break_stmt ()
/* Generate the RTL for a BREAK_STMT. */
void
genrtl_break_stmt ()
genrtl_break_stmt (void)
{
emit_line_note (input_filename, input_line);
if ( ! expand_exit_something ())
@ -619,7 +598,7 @@ genrtl_break_stmt ()
/* Build a continue statement node and return it. */
tree
build_continue_stmt ()
build_continue_stmt (void)
{
return (build_stmt (CONTINUE_STMT));
}
@ -627,18 +606,17 @@ build_continue_stmt ()
/* Generate the RTL for a CONTINUE_STMT. */
void
genrtl_continue_stmt ()
genrtl_continue_stmt (void)
{
emit_line_note (input_filename, input_line);
if (! expand_continue_loop (0))
error ("continue statement not within a loop");
error ("continue statement not within a loop");
}
/* Generate the RTL for T, which is a SCOPE_STMT. */
void
genrtl_scope_stmt (t)
tree t;
genrtl_scope_stmt (tree t)
{
tree block = SCOPE_STMT_BLOCK (t);
@ -652,7 +630,7 @@ genrtl_scope_stmt (t)
else if (!SCOPE_NULLIFIED_P (t))
{
rtx note = emit_note (NULL,
(SCOPE_BEGIN_P (t)
(SCOPE_BEGIN_P (t)
? NOTE_INSN_BLOCK_BEG
: NOTE_INSN_BLOCK_END));
NOTE_BLOCK (note) = block;
@ -666,7 +644,7 @@ genrtl_scope_stmt (t)
for (fn = BLOCK_VARS (block); fn; fn = TREE_CHAIN (fn))
{
if (TREE_CODE (fn) == FUNCTION_DECL
if (TREE_CODE (fn) == FUNCTION_DECL
&& DECL_CONTEXT (fn) == current_function_decl
&& DECL_SAVED_INSNS (fn)
&& !TREE_ASM_WRITTEN (fn)
@ -683,12 +661,11 @@ genrtl_scope_stmt (t)
/* Generate the RTL for T, which is a SWITCH_STMT. */
void
genrtl_switch_stmt (t)
tree t;
genrtl_switch_stmt (tree t)
{
tree cond;
genrtl_do_pushlevel ();
cond = expand_cond (SWITCH_COND (t));
if (cond == error_mark_node)
/* The code is in error, but we don't want expand_end_case to
@ -704,10 +681,7 @@ genrtl_switch_stmt (t)
/* Create a CASE_LABEL tree node and return it. */
tree
build_case_label (low_value, high_value, label_decl)
tree low_value;
tree high_value;
tree label_decl;
build_case_label (tree low_value, tree high_value, tree label_decl)
{
return build_stmt (CASE_LABEL, low_value, high_value, label_decl);
}
@ -715,9 +689,8 @@ build_case_label (low_value, high_value, label_decl)
/* Generate the RTL for a CASE_LABEL. */
void
genrtl_case_label (case_label)
tree case_label;
void
genrtl_case_label (tree case_label)
{
tree duplicate;
tree cleanup;
@ -735,15 +708,14 @@ genrtl_case_label (case_label)
}
}
add_case_node (CASE_LOW (case_label), CASE_HIGH (case_label),
add_case_node (CASE_LOW (case_label), CASE_HIGH (case_label),
CASE_LABEL_DECL (case_label), &duplicate);
}
/* Generate the RTL for T, which is a COMPOUND_STMT. */
void
genrtl_compound_stmt (t)
tree t;
genrtl_compound_stmt (tree t)
{
#ifdef ENABLE_CHECKING
struct nesting *n = current_nesting_level ();
@ -761,14 +733,8 @@ genrtl_compound_stmt (t)
/* Generate the RTL for an ASM_STMT. */
void
genrtl_asm_stmt (cv_qualifier, string, output_operands,
input_operands, clobbers, asm_input_p)
tree cv_qualifier;
tree string;
tree output_operands;
tree input_operands;
tree clobbers;
int asm_input_p;
genrtl_asm_stmt (tree cv_qualifier, tree string, tree output_operands,
tree input_operands, tree clobbers, int asm_input_p)
{
if (cv_qualifier != NULL_TREE
&& cv_qualifier != ridpointers[(int) RID_VOLATILE])
@ -782,16 +748,15 @@ genrtl_asm_stmt (cv_qualifier, string, output_operands,
if (asm_input_p)
expand_asm (string, cv_qualifier != NULL_TREE);
else
c_expand_asm_operands (string, output_operands, input_operands,
c_expand_asm_operands (string, output_operands, input_operands,
clobbers, cv_qualifier != NULL_TREE,
input_filename, input_line);
}
/* Generate the RTL for a CLEANUP_STMT. */
void
genrtl_cleanup_stmt (t)
tree t;
void
genrtl_cleanup_stmt (tree t)
{
tree decl = CLEANUP_DECL (t);
if (!decl || (DECL_SIZE (decl) && TREE_TYPE (decl) != error_mark_node))
@ -802,8 +767,7 @@ genrtl_cleanup_stmt (t)
for the substitution. */
void
prep_stmt (t)
tree t;
prep_stmt (tree t)
{
if (!STMT_LINENO_FOR_FN_P (t))
input_line = STMT_LINENO (t);
@ -814,8 +778,7 @@ prep_stmt (t)
other statements at its nesting level. */
void
expand_stmt (t)
tree t;
expand_stmt (tree t)
{
while (t && t != error_mark_node)
{
@ -920,7 +883,7 @@ expand_stmt (t)
default:
if (lang_expand_stmt)
(*lang_expand_stmt) (t);
else
else
abort ();
break;
}
@ -938,10 +901,8 @@ expand_stmt (t)
/* If *TP is a potentially reachable label, return nonzero. */
static tree
find_reachable_label_1 (tp, walk_subtrees, data)
tree *tp;
int *walk_subtrees ATTRIBUTE_UNUSED;
void *data ATTRIBUTE_UNUSED;
find_reachable_label_1 (tree *tp, int *walk_subtrees ATTRIBUTE_UNUSED,
void *data ATTRIBUTE_UNUSED)
{
switch (TREE_CODE (*tp))
{
@ -958,8 +919,7 @@ find_reachable_label_1 (tp, walk_subtrees, data)
/* Determine whether expression EXP contains a potentially
reachable label. */
static tree
find_reachable_label (exp)
tree exp;
find_reachable_label (tree exp)
{
location_t saved_loc = input_location;
tree ret = walk_tree (&exp, find_reachable_label_1, NULL, NULL);
@ -970,11 +930,10 @@ find_reachable_label (exp)
/* Expand an unreachable if statement, T. This function returns
true if the IF_STMT contains a potentially reachable code_label. */
static bool
expand_unreachable_if_stmt (t)
tree t;
expand_unreachable_if_stmt (tree t)
{
tree n;
if (find_reachable_label (IF_COND (t)) != NULL_TREE)
{
genrtl_if_stmt (t);
@ -984,7 +943,7 @@ expand_unreachable_if_stmt (t)
if (THEN_CLAUSE (t) && ELSE_CLAUSE (t))
{
n = expand_unreachable_stmt (THEN_CLAUSE (t), 0);
if (n != NULL_TREE)
{
rtx label;
@ -1004,9 +963,9 @@ expand_unreachable_if_stmt (t)
n = expand_unreachable_stmt (ELSE_CLAUSE (t), 0);
else
n = NULL_TREE;
expand_stmt (n);
return n != NULL_TREE;
}
@ -1015,9 +974,7 @@ expand_unreachable_if_stmt (t)
then returns the label (or, in same cases, the statement after
one containing the label). */
static tree
expand_unreachable_stmt (t, warn)
tree t;
int warn;
expand_unreachable_stmt (tree t, int warn)
{
int saved;
@ -1102,4 +1059,3 @@ expand_unreachable_stmt (t, warn)
}
return NULL_TREE;
}

View File

@ -153,90 +153,88 @@ struct lang_type GTY(())
/* in c-lang.c and objc-act.c */
extern tree lookup_interface PARAMS ((tree));
extern tree is_class_name PARAMS ((tree));
extern tree objc_is_id PARAMS ((tree));
extern void objc_check_decl PARAMS ((tree));
extern void finish_file PARAMS ((void));
extern int objc_comptypes PARAMS ((tree, tree, int));
extern tree objc_message_selector PARAMS ((void));
extern tree lookup_objc_ivar PARAMS ((tree));
extern void c_expand_body PARAMS ((tree));
extern tree lookup_interface (tree);
extern tree is_class_name (tree);
extern tree objc_is_id (tree);
extern void objc_check_decl (tree);
extern void finish_file (void);
extern int objc_comptypes (tree, tree, int);
extern tree objc_message_selector (void);
extern tree lookup_objc_ivar (tree);
extern void c_expand_body (tree);
/* in c-parse.in */
extern void c_parse_init PARAMS ((void));
extern void c_parse_init (void);
/* in c-aux-info.c */
extern void gen_aux_info_record PARAMS ((tree, int, int, int));
extern void gen_aux_info_record (tree, int, int, int);
/* in c-decl.c */
extern int global_bindings_p PARAMS ((void));
extern int kept_level_p PARAMS ((void));
extern tree getdecls PARAMS ((void));
extern void pushlevel PARAMS ((int));
extern void insert_block PARAMS ((tree));
extern void set_block PARAMS ((tree));
extern tree pushdecl PARAMS ((tree));
extern int global_bindings_p (void);
extern int kept_level_p (void);
extern tree getdecls (void);
extern void pushlevel (int);
extern void insert_block (tree);
extern void set_block (tree);
extern tree pushdecl (tree);
extern void c_insert_default_attributes PARAMS ((tree));
extern void c_init_decl_processing PARAMS ((void));
extern void c_dup_lang_specific_decl PARAMS ((tree));
extern void c_print_identifier PARAMS ((FILE *, tree, int));
extern tree build_array_declarator PARAMS ((tree, tree, int, int));
extern tree build_enumerator PARAMS ((tree, tree));
extern void check_for_loop_decls PARAMS ((void));
extern void clear_parm_order PARAMS ((void));
extern int complete_array_type PARAMS ((tree, tree, int));
extern void declare_parm_level PARAMS ((int));
extern tree define_label PARAMS ((const char *, int,
tree));
extern void finish_decl PARAMS ((tree, tree, tree));
extern tree finish_enum PARAMS ((tree, tree, tree));
extern void finish_function PARAMS ((int, int));
extern tree finish_struct PARAMS ((tree, tree, tree));
extern tree get_parm_info PARAMS ((int));
extern tree grokfield PARAMS ((const char *, int, tree, tree, tree));
extern tree groktypename PARAMS ((tree));
extern tree groktypename_in_parm_context PARAMS ((tree));
extern tree implicitly_declare PARAMS ((tree));
extern int in_parm_level_p PARAMS ((void));
extern void keep_next_level PARAMS ((void));
extern tree lookup_name PARAMS ((tree));
extern void parmlist_tags_warning PARAMS ((void));
extern void pending_xref_error PARAMS ((void));
extern void c_push_function_context PARAMS ((struct function *));
extern void c_pop_function_context PARAMS ((struct function *));
extern void pop_label_level PARAMS ((void));
extern void push_label_level PARAMS ((void));
extern void push_parm_decl PARAMS ((tree));
extern tree pushdecl_top_level PARAMS ((tree));
extern tree pushdecl_function_level PARAMS ((tree, tree));
extern void pushtag PARAMS ((tree, tree));
extern tree set_array_declarator_type PARAMS ((tree, tree, int));
extern tree shadow_label PARAMS ((tree));
extern void shadow_tag PARAMS ((tree));
extern void shadow_tag_warned PARAMS ((tree, int));
extern tree start_enum PARAMS ((tree));
extern int start_function PARAMS ((tree, tree, tree));
extern tree start_decl PARAMS ((tree, tree, int,
tree));
extern tree start_struct PARAMS ((enum tree_code, tree));
extern void store_parm_decls PARAMS ((void));
extern tree xref_tag PARAMS ((enum tree_code, tree));
extern tree c_begin_compound_stmt PARAMS ((void));
extern void c_expand_deferred_function PARAMS ((tree));
extern void c_expand_decl_stmt PARAMS ((tree));
extern tree make_pointer_declarator PARAMS ((tree, tree));
extern void c_insert_default_attributes (tree);
extern void c_init_decl_processing (void);
extern void c_dup_lang_specific_decl (tree);
extern void c_print_identifier (FILE *, tree, int);
extern tree build_array_declarator (tree, tree, int, int);
extern tree build_enumerator (tree, tree);
extern void check_for_loop_decls (void);
extern void clear_parm_order (void);
extern int complete_array_type (tree, tree, int);
extern void declare_parm_level (int);
extern tree define_label (const char *, int, tree);
extern void finish_decl (tree, tree, tree);
extern tree finish_enum (tree, tree, tree);
extern void finish_function (int, int);
extern tree finish_struct (tree, tree, tree);
extern tree get_parm_info (int);
extern tree grokfield (const char *, int, tree, tree, tree);
extern tree groktypename (tree);
extern tree groktypename_in_parm_context (tree);
extern tree implicitly_declare (tree);
extern int in_parm_level_p (void);
extern void keep_next_level (void);
extern tree lookup_name (tree);
extern void parmlist_tags_warning (void);
extern void pending_xref_error (void);
extern void c_push_function_context (struct function *);
extern void c_pop_function_context (struct function *);
extern void pop_label_level (void);
extern void push_label_level (void);
extern void push_parm_decl (tree);
extern tree pushdecl_top_level (tree);
extern tree pushdecl_function_level (tree, tree);
extern void pushtag (tree, tree);
extern tree set_array_declarator_type (tree, tree, int);
extern tree shadow_label (tree);
extern void shadow_tag (tree);
extern void shadow_tag_warned (tree, int);
extern tree start_enum (tree);
extern int start_function (tree, tree, tree);
extern tree start_decl (tree, tree, int, tree);
extern tree start_struct (enum tree_code, tree);
extern void store_parm_decls (void);
extern tree xref_tag (enum tree_code, tree);
extern tree c_begin_compound_stmt (void);
extern void c_expand_deferred_function (tree);
extern void c_expand_decl_stmt (tree);
extern tree make_pointer_declarator (tree, tree);
/* in c-objc-common.c */
extern int c_disregard_inline_limits PARAMS ((tree));
extern int c_cannot_inline_tree_fn PARAMS ((tree *));
extern bool c_objc_common_init PARAMS ((void));
extern int c_missing_noreturn_ok_p PARAMS ((tree));
extern void c_objc_common_finish_file PARAMS ((void));
extern int defer_fn PARAMS ((tree));
extern bool c_warn_unused_global_decl PARAMS ((tree));
extern int c_disregard_inline_limits (tree);
extern int c_cannot_inline_tree_fn (tree *);
extern bool c_objc_common_init (void);
extern int c_missing_noreturn_ok_p (tree);
extern void c_objc_common_finish_file (void);
extern int defer_fn (tree);
extern bool c_warn_unused_global_decl (tree);
#define c_build_type_variant(TYPE, CONST_P, VOLATILE_P) \
c_build_qualified_type ((TYPE), \
@ -245,46 +243,42 @@ extern bool c_warn_unused_global_decl PARAMS ((tree));
#define c_sizeof_nowarn(T) c_sizeof_or_alignof_type (T, SIZEOF_EXPR, 0)
/* in c-typeck.c */
extern tree require_complete_type PARAMS ((tree));
extern int comptypes PARAMS ((tree, tree));
extern tree c_size_in_bytes PARAMS ((tree));
extern bool c_mark_addressable PARAMS ((tree));
extern void c_incomplete_type_error PARAMS ((tree, tree));
extern tree c_type_promotes_to PARAMS ((tree));
extern tree build_component_ref PARAMS ((tree, tree));
extern tree build_indirect_ref PARAMS ((tree, const char *));
extern tree build_array_ref PARAMS ((tree, tree));
extern tree build_external_ref PARAMS ((tree, int));
extern tree parser_build_binary_op PARAMS ((enum tree_code,
tree, tree));
extern int c_tree_expr_nonnegative_p PARAMS ((tree));
extern void readonly_warning PARAMS ((tree, const char *));
extern tree build_conditional_expr PARAMS ((tree, tree, tree));
extern tree build_compound_expr PARAMS ((tree));
extern tree c_cast_expr PARAMS ((tree, tree));
extern tree build_c_cast PARAMS ((tree, tree));
extern tree build_modify_expr PARAMS ((tree, enum tree_code,
tree));
extern void store_init_value PARAMS ((tree, tree));
extern void error_init PARAMS ((const char *));
extern void pedwarn_init PARAMS ((const char *));
extern void start_init PARAMS ((tree, tree, int));
extern void finish_init PARAMS ((void));
extern void really_start_incremental_init PARAMS ((tree));
extern void push_init_level PARAMS ((int));
extern tree pop_init_level PARAMS ((int));
extern void set_init_index PARAMS ((tree, tree));
extern void set_init_label PARAMS ((tree));
extern void process_init_element PARAMS ((tree));
extern tree build_compound_literal PARAMS ((tree, tree));
extern void pedwarn_c99 PARAMS ((const char *, ...))
ATTRIBUTE_PRINTF_1;
extern tree c_start_case PARAMS ((tree));
extern void c_finish_case PARAMS ((void));
extern tree simple_asm_stmt PARAMS ((tree));
extern tree build_asm_stmt PARAMS ((tree, tree, tree,
tree, tree));
extern tree c_convert_parm_for_inlining PARAMS ((tree, tree, tree));
extern tree require_complete_type (tree);
extern int comptypes (tree, tree);
extern tree c_size_in_bytes (tree);
extern bool c_mark_addressable (tree);
extern void c_incomplete_type_error (tree, tree);
extern tree c_type_promotes_to (tree);
extern tree build_component_ref (tree, tree);
extern tree build_indirect_ref (tree, const char *);
extern tree build_array_ref (tree, tree);
extern tree build_external_ref (tree, int);
extern tree parser_build_binary_op (enum tree_code, tree, tree);
extern int c_tree_expr_nonnegative_p (tree);
extern void readonly_warning (tree, const char *);
extern tree build_conditional_expr (tree, tree, tree);
extern tree build_compound_expr (tree);
extern tree c_cast_expr (tree, tree);
extern tree build_c_cast (tree, tree);
extern tree build_modify_expr (tree, enum tree_code, tree);
extern void store_init_value (tree, tree);
extern void error_init (const char *);
extern void pedwarn_init (const char *);
extern void start_init (tree, tree, int);
extern void finish_init (void);
extern void really_start_incremental_init (tree);
extern void push_init_level (int);
extern tree pop_init_level (int);
extern void set_init_index (tree, tree);
extern void set_init_label (tree);
extern void process_init_element (tree);
extern tree build_compound_literal (tree, tree);
extern void pedwarn_c99 (const char *, ...) ATTRIBUTE_PRINTF_1;
extern tree c_start_case (tree);
extern void c_finish_case (void);
extern tree simple_asm_stmt (tree);
extern tree build_asm_stmt (tree, tree, tree, tree, tree);
extern tree c_convert_parm_for_inlining (tree, tree, tree);
/* Set to 0 at beginning of a function definition, set to 1 if
a return statement that specifies a return value is seen. */
@ -306,7 +300,7 @@ extern int current_function_returns_abnormally;
extern int system_header_p;
/* In c-decl.c */
extern void c_finish_incomplete_decl PARAMS ((tree));
extern void c_finish_incomplete_decl (tree);
extern GTY(()) tree static_ctors;
extern GTY(()) tree static_dtors;

File diff suppressed because it is too large Load Diff