[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