[RFA] Fix preprocessor/6517
Neil Booth
neil@daikokuya.demon.co.uk
Tue May 21 14:49:00 GMT 2002
If the preprocessor had a fatal error during option parsing,
it would set its error count appropriately, but the front end
was ignoring it (this goes back to 3.0; stand-alone cpp0
was always fine). This patch causes errorcount to be set
in the C front ends appropriately after option processing,
and the compiler to exit if there are any errors after
option processing.
OK to commit (and for 3.1)?
Neil.
* Makefile.in: Update.
* c-common.c (c_common_post_options): Add preprocessor
errors to the error count.
* c-lang.c (c_post_options): Kill.
(LANG_HOOKS_POST_OPTIONS): Use c_common_post_options.
* hooks.h: Add header guards.
* langhooks-def.h: Include hooks.h.
(LANG_HOOKS_POST_OPTIONS): Update.
* langhooks.h (struct lang_hooks): Update post_options.
* toplev.c (parse_options_and_default_flags): Update.
cp:
* cp-lang.c (LANG_HOOKS_POST_OPTIONS): Use c_common_post_options.
* cp-tree.h (cxx_post_options): Kill.
* cp-lex.c (cxx_post_options): Kill.
objc:
* objc-lang.c (objc_post_options): Kill.
(LANG_HOOKS_POST_OPTIONS): Use c_common_post_options.
============================================================
Index: gcc/Makefile.in
--- gcc/Makefile.in 20 May 2002 07:22:27 -0000 1.877
+++ gcc/Makefile.in 21 May 2002 21:22:59 -0000
@@ -547,6 +547,7 @@ CONFIG_H = $(GCONFIG_H) insn-constants.h
TCONFIG_H = tconfig.h $(xm_file_list)
TARGET_H = target.h
HOOKS_H = hooks.h
+LANGHOOKS_DEF_H = langhooks.h $(HOOKS_H)
TARGET_DEF_H = target-def.h $(HOOKS_H)
TM_P_H = tm_p.h $(tm_p_file_list) tm-preds.h
@@ -1161,7 +1162,7 @@ c-decl.o : c-decl.c $(CONFIG_H) $(SYSTEM
c-typeck.o : c-typeck.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(C_TREE_H) \
$(TARGET_H) flags.h intl.h output.h $(EXPR_H) $(RTL_H) toplev.h $(TM_P_H)
c-lang.o : c-lang.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(C_TREE_H) \
- langhooks.h langhooks-def.h c-common.h
+ langhooks.h $(LANGHOOKS_DEF_H) c-common.h
c-lex.o : c-lex.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) c-lex.h \
debug.h $(C_TREE_H) c-common.h \
c-pragma.h input.h intl.h flags.h toplev.h output.h \
@@ -1336,7 +1337,7 @@ convert.o: convert.c $(CONFIG_H) $(SYSTE
langhooks.o : langhooks.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) toplev.h \
tree-inline.h $(RTL_H) insn-config.h integrate.h langhooks.h \
- langhooks-def.h flags.h
+ $(LANGHOOKS_DEF_H) flags.h
tree.o : tree.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) flags.h function.h toplev.h \
$(GGC_H) $(HASHTAB_H) $(TARGET_H) output.h $(TM_P_H) langhooks.h
tree-dump.o: tree-dump.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(C_TREE_H) \
@@ -1355,7 +1356,7 @@ fold-const.o : fold-const.c $(CONFIG_H)
toplev.h $(HASHTAB_H) $(EXPR_H) $(RTL_H) $(GGC_H) $(TM_P_H) langhooks.h
diagnostic.o : diagnostic.c diagnostic.h real.h diagnostic.def \
$(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(TM_P_H) flags.h $(GGC_H) \
- input.h toplev.h intl.h langhooks.h langhooks-def.h
+ input.h toplev.h intl.h langhooks.h $(LANGHOOKS_DEF_H)
toplev.o : toplev.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) function.h \
flags.h xcoffout.h input.h $(INSN_ATTR_H) output.h diagnostic.h \
debug.h insn-config.h intl.h $(RECOG_H) Makefile toplev.h \
============================================================
Index: gcc/c-common.c
--- gcc/c-common.c 19 May 2002 21:53:52 -0000 1.327
+++ gcc/c-common.c 21 May 2002 21:23:10 -0000
@@ -4319,6 +4319,10 @@ c_common_post_options ()
warning ("-Wformat-security ignored without -Wformat");
if (warn_missing_format_attribute && !warn_format)
warning ("-Wmissing-format-attribute ignored without -Wformat");
+
+ /* If an error has occurred in cpplib, note it so we fail
+ immediately. */
+ errorcount += cpp_errors (parse_in);
}
/* Hook that registers front end and target-specific built-ins. */
============================================================
Index: gcc/c-lang.c
--- gcc/c-lang.c 25 Apr 2002 06:24:21 -0000 1.92
+++ gcc/c-lang.c 21 May 2002 21:23:14 -0000
@@ -30,7 +30,6 @@ Software Foundation, 59 Temple Place - S
static const char *c_init PARAMS ((const char *));
static void c_init_options PARAMS ((void));
-static void c_post_options PARAMS ((void));
/* ### When changing hooks, consider if ObjC needs changing too!! ### */
@@ -45,7 +44,7 @@ static void c_post_options PARAMS ((void
#undef LANG_HOOKS_DECODE_OPTION
#define LANG_HOOKS_DECODE_OPTION c_decode_option
#undef LANG_HOOKS_POST_OPTIONS
-#define LANG_HOOKS_POST_OPTIONS c_post_options
+#define LANG_HOOKS_POST_OPTIONS c_common_post_options
#undef LANG_HOOKS_GET_ALIAS_SET
#define LANG_HOOKS_GET_ALIAS_SET c_common_get_alias_set
#undef LANG_HOOKS_SAFE_FROM_P
@@ -154,13 +153,6 @@ const char *const tree_code_name[] = {
#include "c-common.def"
};
#undef DEFTREECODE
-
-/* Post-switch processing. */
-static void
-c_post_options ()
-{
- c_common_post_options ();
-}
static void
c_init_options ()
============================================================
Index: gcc/hooks.c
--- gcc/hooks.c 19 May 2002 05:22:55 -0000 1.3
+++ gcc/hooks.c 21 May 2002 21:23:14 -0000
@@ -26,6 +26,12 @@ Foundation, 59 Temple Place - Suite 330,
#include "system.h"
#include "hooks.h"
+/* Generic hook that does absolutely zappo. */
+void
+hook_void_void ()
+{
+}
+
/* Generic hook that takes no arguments and returns false. */
bool
hook_void_bool_false ()
============================================================
Index: gcc/hooks.h
--- gcc/hooks.h 19 May 2002 05:22:55 -0000 1.3
+++ gcc/hooks.h 21 May 2002 21:23:14 -0000
@@ -19,6 +19,12 @@ Foundation, 59 Temple Place - Suite 330,
You are forbidden to forbid anyone else to use, share and improve
what you give them. Help stamp out software-hoarding! */
+#ifndef GCC_HOOKS_H
+#define GCC_HOOKS_H
+
bool hook_void_bool_false PARAMS ((void));
bool hook_tree_bool_false PARAMS ((tree));
void hook_tree_int_void PARAMS ((tree, int));
+void hook_void_void PARAMS ((void));
+
+#endif
============================================================
Index: gcc/langhooks-def.h
--- gcc/langhooks-def.h 25 Apr 2002 06:24:22 -0000 1.32
+++ gcc/langhooks-def.h 21 May 2002 21:23:15 -0000
@@ -22,6 +22,8 @@ Boston, MA 02111-1307, USA. */
#ifndef GCC_LANG_HOOKS_DEF_H
#define GCC_LANG_HOOKS_DEF_H
+#include "hooks.h"
+
struct diagnostic_context;
/* Provide a hook routine for alias sets that always returns 1. This is
@@ -86,7 +88,7 @@ tree lhd_tree_inlining_convert_parm_for_
#define LANG_HOOKS_CLEAR_BINDING_STACK lhd_clear_binding_stack
#define LANG_HOOKS_INIT_OPTIONS lhd_do_nothing
#define LANG_HOOKS_DECODE_OPTION lhd_decode_option
-#define LANG_HOOKS_POST_OPTIONS lhd_do_nothing
+#define LANG_HOOKS_POST_OPTIONS hook_void_void
#define LANG_HOOKS_GET_ALIAS_SET lhd_get_alias_set
#define LANG_HOOKS_EXPAND_CONSTANT lhd_return_tree
#define LANG_HOOKS_EXPAND_EXPR lhd_expand_expr
============================================================
Index: gcc/langhooks.h
--- gcc/langhooks.h 25 Apr 2002 06:24:22 -0000 1.39
+++ gcc/langhooks.h 21 May 2002 21:23:16 -0000
@@ -199,7 +199,10 @@ struct lang_hooks
/* Called when all command line options have been parsed. Should do
any required consistency checks, modifications etc. Complex
initialization should be left to the "init" callback, since GC
- and the identifier hashes are set up between now and then. */
+ and the identifier hashes are set up between now and then.
+
+ If errorcount is non-zero after this call the compiler exits
+ immediately and the finish hook is not called. */
void (*post_options) PARAMS ((void));
/* Called after post_options, to initialize the front end. The main
============================================================
Index: gcc/toplev.c
--- gcc/toplev.c 19 May 2002 08:31:47 -0000 1.628
+++ gcc/toplev.c 21 May 2002 21:23:29 -0000
@@ -5173,7 +5173,7 @@ toplev_main (argc, argv)
parse_options_and_default_flags (argc, argv);
/* Exit early if we can (e.g. -help). */
- if (!exit_after_options)
+ if (!errorcount && !exit_after_options)
do_compile ();
if (errorcount || sorrycount)
============================================================
Index: gcc/cp/Make-lang.in
--- gcc/cp/Make-lang.in 6 May 2002 22:53:08 -0000 1.112
+++ gcc/cp/Make-lang.in 21 May 2002 21:23:30 -0000
@@ -251,7 +251,7 @@ cp/spew.o: cp/spew.c $(CXX_TREE_H) cp/pa
cp/lex.o: cp/lex.c $(CXX_TREE_H) cp/parse.h flags.h cp/lex.h c-pragma.h \
toplev.h output.h mbchar.h $(GGC_H) input.h diagnostic.h cp/operators.def \
$(TM_P_H)
-cp/cp-lang.o: cp/cp-lang.c $(CXX_TREE_H) toplev.h langhooks.h langhooks-def.h \
+cp/cp-lang.o: cp/cp-lang.c $(CXX_TREE_H) toplev.h langhooks.h $(LANGHOOKS_DEF_H) \
c-common.h
cp/decl.o: cp/decl.c $(CXX_TREE_H) flags.h cp/lex.h cp/decl.h stack.h \
output.h $(EXPR_H) except.h toplev.h hash.h $(GGC_H) $(RTL_H) \
@@ -283,7 +283,7 @@ cp/expr.o: cp/expr.c $(CXX_TREE_H) $(RTL
cp/pt.o: cp/pt.c $(CXX_TREE_H) cp/decl.h cp/parse.h cp/lex.h toplev.h \
$(GGC_H) $(RTL_H) except.h tree-inline.h
cp/error.o: cp/error.c $(CXX_TREE_H) toplev.h diagnostic.h flags.h real.h \
- langhooks-def.h
+ $(LANGHOOKS_DEF_H)
cp/repo.o: cp/repo.c $(CXX_TREE_H) toplev.h $(GGC_H) diagnostic.h
cp/semantics.o: cp/semantics.c $(CXX_TREE_H) cp/lex.h except.h toplev.h \
flags.h $(GGC_H) debug.h output.h $(RTL_H) $(TIMEVAR_H) $(EXPR_H) \
============================================================
Index: gcc/cp/cp-lang.c
--- gcc/cp/cp-lang.c 12 May 2002 17:29:05 -0000 1.34
+++ gcc/cp/cp-lang.c 21 May 2002 21:23:32 -0000
@@ -1,5 +1,5 @@
/* Language-dependent hooks for C++.
- Copyright 2001 Free Software Foundation, Inc.
+ Copyright 2001, 2002 Free Software Foundation, Inc.
Contributed by Alexandre Oliva <aoliva@redhat.com>
This file is part of GNU CC.
@@ -45,7 +45,7 @@ static bool cxx_warn_unused_global_decl
#undef LANG_HOOKS_DECODE_OPTION
#define LANG_HOOKS_DECODE_OPTION cxx_decode_option
#undef LANG_HOOKS_POST_OPTIONS
-#define LANG_HOOKS_POST_OPTIONS cxx_post_options
+#define LANG_HOOKS_POST_OPTIONS c_common_post_options
#undef LANG_HOOKS_GET_ALIAS_SET
#define LANG_HOOKS_GET_ALIAS_SET cxx_get_alias_set
#undef LANG_HOOKS_EXPAND_CONSTANT
============================================================
Index: gcc/cp/cp-tree.h
--- gcc/cp/cp-tree.h 19 May 2002 05:15:10 -0000 1.715
+++ gcc/cp/cp-tree.h 21 May 2002 21:23:44 -0000
@@ -3974,7 +3974,6 @@ extern int cp_type_qual_from_rid
extern const char *cxx_init PARAMS ((const char *));
extern void cxx_finish PARAMS ((void));
extern void cxx_init_options PARAMS ((void));
-extern void cxx_post_options PARAMS ((void));
/* in method.c */
extern void init_method PARAMS ((void));
============================================================
Index: gcc/cp/lex.c
--- gcc/cp/lex.c 25 Apr 2002 06:24:34 -0000 1.277
+++ gcc/cp/lex.c 21 May 2002 21:23:48 -0000
@@ -1,6 +1,6 @@
/* Separate lexical analyzer for GNU C++.
Copyright (C) 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
- 1999, 2000, 2001 Free Software Foundation, Inc.
+ 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
Hacked by Michael Tiemann (tiemann@cygnus.com)
This file is part of GNU CC.
@@ -203,13 +203,6 @@ int interface_unknown; /* whether or no
to behave according to #pragma interface. */
-/* Post-switch processing. */
-void
-cxx_post_options ()
-{
- c_common_post_options ();
-}
-
/* Initialization before switch parsing. */
void
cxx_init_options ()
============================================================
Index: gcc/objc/Make-lang.in
--- gcc/objc/Make-lang.in 1 Feb 2002 11:48:46 -0000 1.44
+++ gcc/objc/Make-lang.in 21 May 2002 21:23:49 -0000
@@ -93,7 +93,7 @@ objc-act.o : $(srcdir)/objc/objc-act.c \
$(srcdir)/c-tree.h $(srcdir)/c-common.h $(srcdir)/c-lex.h \
$(srcdir)/toplev.h $(srcdir)/flags.h $(srcdir)/objc/objc-act.h \
$(srcdir)/input.h $(srcdir)/function.h $(srcdir)/output.h $(srcdir)/debug.h \
- $(srcdir)/langhooks.h $(srcdir)/langhooks-def.h
+ $(srcdir)/langhooks.h $(LANGHOOKS_DEF_H)
$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -I$(srcdir)/objc \
-c $(srcdir)/objc/objc-act.c
============================================================
Index: gcc/objc/objc-lang.c
--- gcc/objc/objc-lang.c 25 Apr 2002 06:24:41 -0000 1.21
+++ gcc/objc/objc-lang.c 21 May 2002 21:23:49 -0000
@@ -1,5 +1,5 @@
/* Language-dependent hooks for Objective-C.
- Copyright 2001 Free Software Foundation, Inc.
+ Copyright 2001, 2002 Free Software Foundation, Inc.
Contributed by Ziemowit Laski <zlaski@apple.com>
This file is part of GNU CC.
@@ -30,7 +30,6 @@ Boston, MA 02111-1307, USA. */
#include "langhooks-def.h"
static void objc_init_options PARAMS ((void));
-static void objc_post_options PARAMS ((void));
#undef LANG_HOOKS_NAME
#define LANG_HOOKS_NAME "GNU Objective-C"
@@ -43,7 +42,7 @@ static void objc_post_options
#undef LANG_HOOKS_DECODE_OPTION
#define LANG_HOOKS_DECODE_OPTION objc_decode_option
#undef LANG_HOOKS_POST_OPTIONS
-#define LANG_HOOKS_POST_OPTIONS objc_post_options
+#define LANG_HOOKS_POST_OPTIONS c_common_post_options
#undef LANG_HOOKS_PARSE_FILE
#define LANG_HOOKS_PARSE_FILE c_common_parse_file
#undef LANG_HOOKS_MARK_TREE
@@ -165,13 +164,3 @@ objc_init_options ()
{
c_common_init_options (clk_objective_c);
}
-
-/* Post-switch processing. */
-
-static void
-objc_post_options ()
-{
- c_common_post_options ();
-}
-
-
More information about the Gcc-patches
mailing list