summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog59
-rw-r--r--gcc/cpplib.c78
2 files changed, 109 insertions, 28 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c3655b706f2..9e58e55861b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+1999-08-25 13:51 -0700 Jim Meyering <meyering@ascend.com>
+
+ * cpplib.c (detect_if_not_defined): New function.
+ (do_if): Use it to detect potential once-only headers.
+
Wed Aug 25 14:00:18 1999 Jason Merrill <jason@yorick.cygnus.com>
* c-common.c (combine_strings): Always set TREE_CONSTANT.
@@ -659,7 +664,7 @@ Fri Aug 20 22:32:17 1999 Michael Hayes <m.hayes@elec.canterbury.ac.nz>
* gencheck.c: Do not define any *_CHECK1 macros.
Thu Aug 19 14:42:38 1999 Mike Stump <mrs@wrs.com>
- Mark Mitchell <mark@codesourcery.com>
+ Mark Mitchell <mark@codesourcery.com>
* c-common.c (c_get_alias_set): Fix support for poitners and
references.
@@ -2147,8 +2152,8 @@ Thu Jul 29 09:21:42 1999 Nick Clifton <nickc@cygnus.com>
Wed Jul 28 12:50:48 1999 Geoff Keating <geoffk@cygnus.com>
- * config/mips/mips.c: system.h handles MIN and MAX, don't undefine
- them here.
+ * config/mips/mips.c: system.h handles MIN and MAX, don't undefine
+ them here.
Wed Jul 28 13:18:35 1999 Jeffrey A Law (law@cygnus.com)
@@ -2156,8 +2161,8 @@ Wed Jul 28 13:18:35 1999 Jeffrey A Law (law@cygnus.com)
proper mode in the condition string.
(icacheflush, dcacheflush): Remove modes from match_operands.
- * pa.c (emit_move_sequence): Always convert scratch_reg to the
- proper mode before using it.
+ * pa.c (emit_move_sequence): Always convert scratch_reg to the
+ proper mode before using it.
* pa.md (adddi3, subdi3): Turn into a define_expand/define_insn
pair.
@@ -2174,7 +2179,7 @@ Wed Jul 28 13:18:35 1999 Jeffrey A Law (law@cygnus.com)
* pa.md (call, call_value): Use "word_mode" instead of "SImode" as
needed.
- * README: Update.
+ * README: Update.
Wed Jul 28 11:28:04 1999 Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
@@ -2772,7 +2777,7 @@ Mon Jul 19 09:36:27 1999 Bernd Schmidt <bernds@cygnus.co.uk>
dialects.
1999-07-17 Alexandre Oliva <oliva@dcc.unicamp.br>
-
+
* gcc.texi: Update e-mail addresses and URLs to gcc.gnu.org.
Removed paragraph about compression of files and size limitation,
duplicated in the FAQ. Use gcc-patches for posting patches.
@@ -2782,8 +2787,8 @@ Mon Jul 19 09:36:27 1999 Bernd Schmidt <bernds@cygnus.co.uk>
1999-07-17 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
- * Makefile.in (stmp-multilib-sub): Make the files extracted
- from $(LIBGCC1) writable.
+ * Makefile.in (stmp-multilib-sub): Make the files extracted
+ from $(LIBGCC1) writable.
Sat Jul 17 14:25:46 1999 Nick Clifton <nickc@cygnus.com>
@@ -3126,7 +3131,7 @@ Fri Jul 2 01:36:36 1999 Robert Lipe <robertlipe@usa.net>
ntohs.
Fri Jul 2 00:46:47 1999 Richard Henderson <rth@cygnus.com>
- Jeff Law <law@cygnus.com>
+ Jeff Law <law@cygnus.com>
* ginclude/varargs.h (va_dcl): Use word_mode for type of
__builtin_va_list.
@@ -3549,7 +3554,7 @@ Fri Jun 18 07:02 1999 Bruce Korb <ddsinc09@ix.netcom.com>
Thu Jun 17 15:06:10 PDT 1999 Don Lindsay <dlindsay@cygnus.com>
- * added support for -mpcrel (PC relative addressing for m68k)
+ * added support for -mpcrel (PC relative addressing for m68k)
based on code done by Michael Tiemann <tiemann@axon.cygnus.com>.
* invoke.texi (m68000 options): Add documentation for -mpcrel flag.
* m68k.c (print_operand_address): Handle 32-bit PIC case.
@@ -3697,8 +3702,8 @@ Mon Jun 14 17:26:40 1999 David Edelsohn <edelsohn@gnu.org>
Mon Jun 14 12:57:38 1999 David Mosberger <davidm@hpl.hp.com>
- * combine.c (simplify_logical, case AND): Only call
- simplify_and_const_int if the mode is no wider than HOST_WIDE_INT
+ * combine.c (simplify_logical, case AND): Only call
+ simplify_and_const_int if the mode is no wider than HOST_WIDE_INT
or the constant is positive.
Mon Jun 14 11:43:41 1999 Nick Clifton <nickc@cygnus.com>
@@ -3885,7 +3890,7 @@ Mon Jun 7 22:05:03 1999 Mark Kettenis <kettenis@gnu.org>
* fixinc/fixincl.x, fixinc/fixincl.sh: Rebuilt.
Mon Jun 7 20:34:20 1999 Robert Lipe <robertlipe@usa.net>
- Jeffrey A Law (law@cygnus.com)
+ Jeffrey A Law (law@cygnus.com)
* varasm.c (assemble_start_function): Remove the function
from the pending weak decls list when we define a function.
@@ -4017,8 +4022,8 @@ Thu Jun 3 01:19:03 1999 Jeffrey A Law (law@cygnus.com)
Wed Jun 2 15:44:15 1999 Mark Mitchell <mark@codesourcery.com>
- Revert this change:
- * fold-const.c (fold): STRIP_NOPS when deciding whether or not
+ Revert this change:
+ * fold-const.c (fold): STRIP_NOPS when deciding whether or not
something is a candidate for optimize_bit_field_compare.
Wed Jun 2 21:53:05 1999 J"orn Rennecke <amylaar@cygnus.co.uk>
@@ -4094,8 +4099,8 @@ Mon May 31 15:23:23 1999 Richard Henderson <rth@cygnus.com>
Mon May 31 11:48:07 1999 Mark Mitchell <mark@codesourcery.com>
- * cccp.c (handle_directive): Handle backslash-newlines in quoted
- strings correctly.
+ * cccp.c (handle_directive): Handle backslash-newlines in quoted
+ strings correctly.
Mon May 31 09:36:11 1999 Cort Dougan <cort@cs.nmt.edu>
@@ -4118,7 +4123,7 @@ Mon May 31 00:46:17 1999 Jeffrey A Law (law@cygnus.com)
* configure.in (native gas tests): Search for an assembler in the
same manner that the installed compiler will.
* configure: Rebuilt.
- * tm.texi (MD_EXEC_PREFIX): Note need to update configure.in too.
+ * tm.texi (MD_EXEC_PREFIX): Note need to update configure.in too.
* alias.c (find_base_term): Improve handling of addresses
constructed from binary operations.
@@ -4158,12 +4163,12 @@ Fri May 28 03:47:03 1999 Eric Raskin (ehr@listworks.com)
Fri May 28 03:41:02 1999 Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
- * rs6000/sysv4.h (CC1_SPEC): Add support for -profile
- (LIB_LINUX_SPEC): Likewise.
- (LIB_LINUX_SPEC): Add support for -pthread
- (CPP_OS_LINUX_SPEC): Likewise.
- (CPP_SYSV_SPEC): Avoid redefinitions if both -fpic and -fPIC are
- specified.
+ * rs6000/sysv4.h (CC1_SPEC): Add support for -profile
+ (LIB_LINUX_SPEC): Likewise.
+ (LIB_LINUX_SPEC): Add support for -pthread
+ (CPP_OS_LINUX_SPEC): Likewise.
+ (CPP_SYSV_SPEC): Avoid redefinitions if both -fpic and -fPIC are
+ specified.
Thu May 27 13:04:52 1999 H.J. Lu (hjl@gnu.org)
@@ -4210,7 +4215,7 @@ Wed May 26 14:18:05 1999 Richard Henderson <rth@cygnus.com>
Wed May 26 09:53:05 1999 Mark Mitchell <mark@codesourcery.com>
- * fold-const.c (fold): STRIP_NOPS when deciding whether or not
+ * fold-const.c (fold): STRIP_NOPS when deciding whether or not
something is a candidate for optimize_bit_field_compare.
Wed May 26 09:40:02 1999 Mark Mitchell <mark@codesourcery.com>
@@ -4279,7 +4284,7 @@ Mon May 24 01:02:12 1999 Mark Mitchell <mark@codesourcery.com>
Sun May 23 20:31:16 1999 Jeffrey A Law (law@cygnus.com)
- * loop.c (strength_reduce): Grow reg_single_usage as needed.
+ * loop.c (strength_reduce): Grow reg_single_usage as needed.
Sun May 23 10:13:20 1999 David O'Brien <obrien@FreeBSD.org>
diff --git a/gcc/cpplib.c b/gcc/cpplib.c
index 06b171758a0..5dde8870789 100644
--- a/gcc/cpplib.c
+++ b/gcc/cpplib.c
@@ -1577,6 +1577,81 @@ do_sccs (pfile, keyword)
}
#endif
+
+/* We've found an `#if' directive. If the only thing before it in
+ this file is white space, and if it is of the form
+ `#if ! defined SYMBOL', then SYMBOL is a possible controlling macro
+ for inclusion of this file. (See redundant_include_p in cppfiles.c
+ for an explanation of controlling macros.) If so, return a
+ malloc'd copy of SYMBOL. Otherwise, return NULL. */
+
+static U_CHAR *
+detect_if_not_defined (pfile)
+ cpp_reader *pfile;
+{
+ U_CHAR *control_macro = 0;
+
+ if (pfile->only_seen_white == 2)
+ {
+ char *ident;
+ enum cpp_token token;
+ int base_offset;
+ int token_offset;
+ int need_rparen = 0;
+
+ /* Save state required for restore. */
+ pfile->no_macro_expand++;
+ parse_set_mark (pfile);
+ base_offset = CPP_WRITTEN (pfile);
+
+ /* Look for `!', */
+ if (get_directive_token (pfile) != CPP_OTHER
+ || CPP_WRITTEN (pfile) != (size_t) base_offset + 1
+ || CPP_PWRITTEN (pfile)[-1] != '!')
+ goto restore;
+
+ /* ...then `defined', */
+ token_offset = CPP_WRITTEN (pfile);
+ token = get_directive_token (pfile);
+ if (token != CPP_NAME)
+ goto restore;
+ ident = pfile->token_buffer + token_offset;
+ CPP_NUL_TERMINATE (pfile);
+ if (strcmp (ident, "defined"))
+ goto restore;
+
+ /* ...then an optional '(' and the name, */
+ token_offset = CPP_WRITTEN (pfile);
+ token = get_directive_token (pfile);
+ if (token == CPP_LPAREN)
+ {
+ token_offset = CPP_WRITTEN (pfile);
+ token = get_directive_token (pfile);
+ if (token != CPP_NAME)
+ goto restore;
+ need_rparen = 1;
+ }
+ else if (token != CPP_NAME)
+ goto restore;
+
+ ident = pfile->token_buffer + token_offset;
+ CPP_NUL_TERMINATE (pfile);
+
+ /* ...then the ')', if necessary, */
+ if ((!need_rparen || get_directive_token (pfile) == CPP_RPAREN)
+ /* ...and make sure there's nothing else on the line. */
+ && get_directive_token (pfile) == CPP_VSPACE)
+ control_macro = xstrdup (ident);
+
+ restore:
+ CPP_SET_WRITTEN (pfile, base_offset);
+ pfile->no_macro_expand--;
+ parse_goto_mark (pfile);
+ }
+
+ return control_macro;
+}
+
/*
* handle #if command by
* 1) inserting special `defined' keyword into the hash table
@@ -1595,8 +1670,9 @@ do_if (pfile, keyword)
cpp_reader *pfile;
struct directive *keyword ATTRIBUTE_UNUSED;
{
+ U_CHAR *control_macro = detect_if_not_defined (pfile);
HOST_WIDEST_INT value = eval_if_expression (pfile);
- conditional_skip (pfile, value == 0, T_IF, NULL_PTR);
+ conditional_skip (pfile, value == 0, T_IF, control_macro);
return 0;
}