c-common.c (STDC_0_IN_SYSTEM_HEADERS, [...]): Default-define here.

* c-common.c (STDC_0_IN_SYSTEM_HEADERS, REGISTER_PREFIX):
	Default-define here.
	(builtin_define_with_value): Can now wrap the expansion in
	quotation marks if such is wanted.
	(cb_register_builtins): Update calls to	builtin_define_with_value.
	Define __REGISTER_PREFIX__, __USER_LABEL_PREFIX__, and __VERSION__
	here.
	(c_common_init): Set options->stdc_0_in_system_headers.
	* c-lex.h: Update prototype of builtin_define_with_value.
	* cppdefault.h: Remove default definitions of USER_LABEL_PREFIX
	and REGISTER_PREFIX.

	* cppinit.c (VERS, ULP, C, X): Kill.
	(builtin_array): Remove entries for __VERSION__,
	__USER_LABEL_PREFIX__, __REGISTER_PREFIX__, and
	__HAVE_BUILTIN_SETJMP__.  Make __STDC__ always a builtin, not
	a constant.
	(init_builtins): Kill off a bunch of now-dead code.
	(COMMAND_LINE_OPTIONS): Remove -fleading-underscore and
	-fno-leading-underscore.
	(cpp_handle_option): Remove code to set user_label_prefix.
	(cpp_post_options): Likewise.

	* cpplib.h (struct cpp_options): Remove user_label_prefix.
	(stdc_0_in_system_headers): New.
	* cppmacro.c (builtin_macro): Check CPP_OPTION (pfile,
	stdc_0_in_system_headers) too to decide the value of __STDC__.

	* tradcpp.c (user_label_prefix): Kill.
	(main): Remove code handling -f(no-)leading-underscore.
	(initialize_builtins): Don't define __REGISTER_PREFIX__
	or __USER_LABEL_PREFIX__.
	(install_value): Wrap compound statement in dummy loop so the
	macro works properly in an if statement.

From-SVN: r53525
This commit is contained in:
Zack Weinberg 2002-05-16 19:03:02 +00:00 committed by Zack Weinberg
parent 62e6ca55bd
commit 5279d7394e
8 changed files with 106 additions and 124 deletions

View File

@ -1,3 +1,41 @@
2002-05-16 Zack Weinberg <zack@codesourcery.com>
* c-common.c (STDC_0_IN_SYSTEM_HEADERS, REGISTER_PREFIX):
Default-define here.
(builtin_define_with_value): Can now wrap the expansion in
quotation marks if such is wanted.
(cb_register_builtins): Update calls to builtin_define_with_value.
Define __REGISTER_PREFIX__, __USER_LABEL_PREFIX__, and __VERSION__
here.
(c_common_init): Set options->stdc_0_in_system_headers.
* c-lex.h: Update prototype of builtin_define_with_value.
* cppdefault.h: Remove default definitions of USER_LABEL_PREFIX
and REGISTER_PREFIX.
* cppinit.c (VERS, ULP, C, X): Kill.
(builtin_array): Remove entries for __VERSION__,
__USER_LABEL_PREFIX__, __REGISTER_PREFIX__, and
__HAVE_BUILTIN_SETJMP__. Make __STDC__ always a builtin, not
a constant.
(init_builtins): Kill off a bunch of now-dead code.
(COMMAND_LINE_OPTIONS): Remove -fleading-underscore and
-fno-leading-underscore.
(cpp_handle_option): Remove code to set user_label_prefix.
(cpp_post_options): Likewise.
* cpplib.h (struct cpp_options): Remove user_label_prefix.
(stdc_0_in_system_headers): New.
* cppmacro.c (builtin_macro): Check CPP_OPTION (pfile,
stdc_0_in_system_headers) too to decide the value of __STDC__.
* tradcpp.c (user_label_prefix): Kill.
(main): Remove code handling -f(no-)leading-underscore.
(initialize_builtins): Don't define __REGISTER_PREFIX__
or __USER_LABEL_PREFIX__.
(install_value): Wrap compound statement in dummy loop so the
macro works properly in an if statement.
2002-05-16 Janis Johnson <janis187@us.ibm.com>
* loop.h (struct loop_info): Add member has_prefetch.

View File

@ -83,6 +83,14 @@ cpp_reader *parse_in; /* Declared in c-lex.h. */
: "long long unsigned int"))
#endif
#ifndef STDC_0_IN_SYSTEM_HEADERS
#define STDC_0_IN_SYSTEM_HEADERS 0
#endif
#ifndef REGISTER_PREFIX
#define REGISTER_PREFIX ""
#endif
/* The variant of the C language being processed. */
enum c_language_kind c_language;
@ -4331,10 +4339,17 @@ cb_register_builtins (pfile)
cpp_define (pfile, "__USING_SJLJ_EXCEPTIONS__");
/* stddef.h needs to know these. */
builtin_define_with_value ("__SIZE_TYPE__", SIZE_TYPE);
builtin_define_with_value ("__PTRDIFF_TYPE__", PTRDIFF_TYPE);
builtin_define_with_value ("__WCHAR_TYPE__", MODIFIED_WCHAR_TYPE);
builtin_define_with_value ("__WINT_TYPE__", WINT_TYPE);
builtin_define_with_value ("__SIZE_TYPE__", SIZE_TYPE, 0);
builtin_define_with_value ("__PTRDIFF_TYPE__", PTRDIFF_TYPE, 0);
builtin_define_with_value ("__WCHAR_TYPE__", MODIFIED_WCHAR_TYPE, 0);
builtin_define_with_value ("__WINT_TYPE__", WINT_TYPE, 0);
/* For use in assembly language. */
builtin_define_with_value ("__REGISTER_PREFIX__", REGISTER_PREFIX, 0);
builtin_define_with_value ("__USER_LABEL_PREFIX__", user_label_prefix, 0);
/* Misc. */
builtin_define_with_value ("__VERSION__", version_string, 1);
/* A straightforward target hook doesn't work, because of problems
linking that hook's body when part of non-C front ends. */
@ -4385,23 +4400,28 @@ builtin_define_std (macro)
}
}
/* Pass an object-like macro and a value to define it to. */
/* Pass an object-like macro and a value to define it to. The third
parameter says whether or not to turn the value into a string
constant. */
void
builtin_define_with_value (macro, expansion)
builtin_define_with_value (macro, expansion, is_str)
const char *macro;
const char *expansion;
int is_str;
{
char *buf, *q;
char *buf;
size_t mlen = strlen (macro);
size_t elen = strlen (expansion);
size_t extra = 2; /* space for an = and a NUL */
q = buf = alloca (mlen + elen + 2);
memcpy (q, macro, mlen);
q += mlen;
*q++ = '=';
memcpy (q, expansion, elen);
q += elen;
*q = '\0';
if (is_str)
extra += 2; /* space for two quote marks */
buf = alloca (mlen + elen + extra);
if (is_str)
sprintf (buf, "%s=\"%s\"", macro, expansion);
else
sprintf (buf, "%s=%s", macro, expansion);
cpp_define (parse_in, buf);
}
@ -4429,6 +4449,7 @@ c_common_init (filename)
options->unsigned_char = !flag_signed_char; */
options->warn_multichar = warn_multichar;
options->stdc_0_in_system_headers = STDC_0_IN_SYSTEM_HEADERS;
/* Register preprocessor built-ins before calls to
cpp_main_file. */

View File

@ -49,7 +49,10 @@ extern struct cpp_reader* parse_in;
"_mips". */
extern void builtin_define_std PARAMS ((const char *));
/* Pass an object-like macro and a value to define it to. */
extern void builtin_define_with_value PARAMS ((const char *, const char *));
/* Pass an object-like macro and a value to define it to. The third
parameter says whether or not to turn the value into a string
constant. */
extern void builtin_define_with_value PARAMS ((const char *, const char *,
int));
#endif /* ! GCC_C_LEX_H */

View File

@ -42,24 +42,6 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#undef CROSS_INCLUDE_DIR
#endif
/* We let tm.h override the types used here, to handle trivial differences
such as the choice of unsigned int or long unsigned int for size_t.
When machines start needing nontrivial differences in the size type,
it would be best to do something here to figure out automatically
from other information what type to use. */
/* The string value for __USER_LABEL_PREFIX__ */
#ifndef USER_LABEL_PREFIX
#define USER_LABEL_PREFIX ""
#endif
/* The string value for __REGISTER_PREFIX__ */
#ifndef REGISTER_PREFIX
#define REGISTER_PREFIX ""
#endif
/* This is the default list of directories to search for include files.
It may be overridden by the various -I and -ixxx options.

View File

@ -623,11 +623,6 @@ cpp_destroy (pfile)
known at build time should not be flagged BUILTIN, as then they do
not appear in macro dumps with e.g. -dM or -dD.
Two values are not compile time constants, so we tag
them in the FLAGS field instead:
VERS value is the global version_string, quoted
ULP value is the global user_label_prefix
Also, macros with CPLUS set in the flags field are entered only for C++. */
struct builtin
{
@ -638,15 +633,11 @@ struct builtin
unsigned short flags;
unsigned short len;
};
#define VERS 0x01
#define ULP 0x02
#define CPLUS 0x04
#define BUILTIN 0x08
#define OPERATOR 0x10
#define B(n, t) { U n, 0, t, 0, BUILTIN, sizeof n - 1 }
#define C(n, v) { U n, v, 0, 0, 0, sizeof n - 1 }
#define X(n, f) { U n, 0, 0, 0, f, sizeof n - 1 }
#define O(n, c, f) { U n, 0, 0, c, OPERATOR | f, sizeof n - 1 }
static const struct builtin builtin_array[] =
{
@ -657,16 +648,7 @@ static const struct builtin builtin_array[] =
B("__LINE__", BT_SPECLINE),
B("__INCLUDE_LEVEL__", BT_INCLUDE_LEVEL),
B("_Pragma", BT_PRAGMA),
X("__VERSION__", VERS),
X("__USER_LABEL_PREFIX__", ULP),
C("__REGISTER_PREFIX__", REGISTER_PREFIX),
C("__HAVE_BUILTIN_SETJMP__", "1"),
#ifdef STDC_0_IN_SYSTEM_HEADERS
B("__STDC__", BT_STDC),
#else
C("__STDC__", "1"),
#endif
/* Named operators known to the preprocessor. These cannot be #defined
and always have their stated meaning. They are treated like normal
@ -685,8 +667,6 @@ static const struct builtin builtin_array[] =
O("xor_eq", CPP_XOR_EQ, CPLUS)
};
#undef B
#undef C
#undef X
#undef O
#define builtin_array_end (builtin_array + ARRAY_SIZE (builtin_array))
@ -700,51 +680,24 @@ init_builtins (pfile)
for(b = builtin_array; b < builtin_array_end; b++)
{
cpp_hashnode *hp;
if ((b->flags & CPLUS) && ! CPP_OPTION (pfile, cplusplus))
continue;
if ((b->flags & OPERATOR) && ! CPP_OPTION (pfile, operator_names))
continue;
if (b->flags & (OPERATOR | BUILTIN))
hp = cpp_lookup (pfile, b->name, b->len);
if (b->flags & OPERATOR)
{
cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
if (b->flags & OPERATOR)
{
hp->flags |= NODE_OPERATOR;
hp->value.operator = b->operator;
}
else
{
hp->type = NT_MACRO;
hp->flags |= NODE_BUILTIN | NODE_WARN;
hp->value.builtin = b->builtin;
}
hp->flags |= NODE_OPERATOR;
hp->value.operator = b->operator;
}
else /* A standard macro of some kind. */
else
{
const char *val;
char *str;
if (b->flags & VERS)
{
/* Allocate enough space for 'name "value"\n\0'. */
str = alloca (b->len + strlen (version_string) + 5);
sprintf (str, "%s \"%s\"\n", b->name, version_string);
}
else
{
if (b->flags & ULP)
val = CPP_OPTION (pfile, user_label_prefix);
else
val = b->value;
/* Allocate enough space for "name value\n\0". */
str = alloca (b->len + strlen (val) + 3);
sprintf(str, "%s %s\n", b->name, val);
}
_cpp_define_builtin (pfile, str);
hp->type = NT_MACRO;
hp->flags |= NODE_BUILTIN | NODE_WARN;
hp->value.builtin = b->builtin;
}
}
@ -1209,8 +1162,6 @@ new_pending_directive (pend, text, handler)
DEF_OPT("U", no_mac, OPT_U) \
DEF_OPT("W", no_arg, OPT_W) /* arg optional */ \
DEF_OPT("d", no_arg, OPT_d) \
DEF_OPT("fleading-underscore", 0, OPT_fleading_underscore) \
DEF_OPT("fno-leading-underscore", 0, OPT_fno_leading_underscore) \
DEF_OPT("fno-operator-names", 0, OPT_fno_operator_names) \
DEF_OPT("fno-preprocessed", 0, OPT_fno_preprocessed) \
DEF_OPT("fno-show-column", 0, OPT_fno_show_column) \
@ -1408,12 +1359,6 @@ cpp_handle_option (pfile, argc, argv, ignore)
{
case N_OPTS: /* Shut GCC up. */
break;
case OPT_fleading_underscore:
CPP_OPTION (pfile, user_label_prefix) = "_";
break;
case OPT_fno_leading_underscore:
CPP_OPTION (pfile, user_label_prefix) = "";
break;
case OPT_fno_operator_names:
CPP_OPTION (pfile, operator_names) = 0;
break;
@ -1843,10 +1788,6 @@ cpp_post_options (pfile)
if (CPP_OPTION (pfile, cplusplus))
CPP_OPTION (pfile, warn_traditional) = 0;
/* Set this if it hasn't been set already. */
if (CPP_OPTION (pfile, user_label_prefix) == NULL)
CPP_OPTION (pfile, user_label_prefix) = USER_LABEL_PREFIX;
/* Permanently disable macro expansion if we are rescanning
preprocessed text. */
if (CPP_OPTION (pfile, preprocessed))

View File

@ -248,9 +248,6 @@ struct cpp_options
const char *include_prefix;
unsigned int include_prefix_len;
/* -fleading_underscore sets this to "_". */
const char *user_label_prefix;
/* The language we're preprocessing. */
enum c_lang lang;
@ -397,6 +394,9 @@ struct cpp_options
/* Nonzero means chars (wide chars) are unsigned. */
unsigned char unsigned_char, unsigned_wchar;
/* Nonzero means __STDC__ should have the value 0 in system headers. */
unsigned char stdc_0_in_system_headers;
};
/* Call backs. */

View File

@ -172,10 +172,20 @@ builtin_macro (pfile, node)
pfile->cur_token[-1].line));
break;
/* __STDC__ has the value 1 under normal circumstances.
However, if (a) we are in a system header, (b) the option
stdc_0_in_system_headers is true, and (c) __STRICT_ANSI__ is
not defined, then it has the value 0. */
case BT_STDC:
{
int stdc = (!CPP_IN_SYSTEM_HEADER (pfile)
|| pfile->spec_nodes.n__STRICT_ANSI__->type != NT_VOID);
int stdc;
if (CPP_IN_SYSTEM_HEADER (pfile)
&& CPP_OPTION (pfile, stdc_0_in_system_headers)
&& pfile->spec_nodes.n__STRICT_ANSI__->type == NT_VOID)
stdc = 0;
else
stdc = 1;
result = new_number_token (pfile, stdc);
}
break;

View File

@ -103,10 +103,6 @@ int warn_comments;
int no_output;
/* Value of __USER_LABEL_PREFIX__. Target-dependent, also controlled
by -f(no-)leading-underscore. */
static const char *user_label_prefix;
/* I/O buffer structure.
The `fname' field is nonzero for source files and #include files
and for the dummy text used for -D and -U.
@ -631,11 +627,7 @@ main (argc, argv)
break;
case 'f':
if (!strcmp (argv[i], "-fleading-underscore"))
user_label_prefix = "_";
else if (!strcmp (argv[i], "-fno-leading-underscore"))
user_label_prefix = "";
else if (!strcmp (argv[i], "-fsigned-char"))
if (!strcmp (argv[i], "-fsigned-char"))
flag_signed_char = 1;
else if (!strcmp (argv[i], "-funsigned-char"))
flag_signed_char = 0;
@ -811,9 +803,6 @@ main (argc, argv)
&& (deps_missing_files || deps_file || print_deps_phony_targets))
fatal ("you must additionally specify either -M or -MM");
if (user_label_prefix == 0)
user_label_prefix = USER_LABEL_PREFIX;
if (print_deps)
{
/* Set the default target (if there is none already), and
@ -5134,8 +5123,9 @@ dump_arg_n (defn, argnum)
#define DSC(x) U x, sizeof x - 1
#define install_spec(name, type) \
install(DSC(name), type, -1);
#define install_value(name, val) \
hp = install(DSC(name), T_CONST, -1); hp->value.cpval = val;
#define install_value(name, val) do { \
hp = install(DSC(name), T_CONST, -1); hp->value.cpval = val; \
} while (0)
static void
initialize_builtins ()
{
@ -5149,9 +5139,6 @@ initialize_builtins ()
install_spec ("__INCLUDE_LEVEL__", T_INCLUDE_LEVEL);
install_spec ("__LINE__", T_SPECLINE);
install_value ("__REGISTER_PREFIX__", REGISTER_PREFIX);
install_value ("__USER_LABEL_PREFIX__", user_label_prefix);
if (flag_signed_char == 0)
install_value ("__CHAR_UNSIGNED__", "1");
}