* cpplib.h (cpp_reader): Remove if_stack. Change
commitc4357c92f4eb9f197e0140c672b1d965c9ed5a1a
authorzack <zack@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 29 May 2000 16:19:32 +0000 (29 16:19 +0000)
committerzack <zack@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 29 May 2000 16:19:32 +0000 (29 16:19 +0000)
tree05d62231cd71e2302cbbf76f31135f52a6e77ba9
parent5e4e7e1fe9ec68cb0c7c875a02094584608eadff
* cpplib.h (cpp_reader): Remove if_stack.  Change
potential_control_macro to a cpp_hashnode *.  Add skipping flag.
* cpphash.h (struct ihash): Change control_macro to a
cpp_hashnode * and shorten name to cmacro.
Add NEVER_REINCLUDE constant.

* cppfiles.c (redundant_include_p): Drop cpp_reader argument.
Examine the cmacro node directly, no need to call cpp_defined.
(_cpp_execute_include, read_include_file): Set cmacro to
NEVER_REINCLUDE, not U"".
* cpplex.c (cpp_push_buffer): Don't set new->if_stack.
(cpp_get_token): If pfile->skipping is true, discard text and
keep scanning until we hit a directive; don't expand macros.

* cpplib.c (struct if_stack): Remove if_succeeded, add
was_skipping. Change control_macro to a cpp_hashnode * and
shorten name to cmacro.  Remove typedef IF_STACK.
(parse_ifdef), detect_if_not_defined): Return a cpp_hashnode *.
(conditional_skip, skip_if_group,
consider_directive_while_skipping): Delete.
(push_conditional): New.
(_cpp_handle_directive): Don't process directives other than
conditionals if we are skipping.

(do_ifdef, do_ifndef, do_if, do_else, do_elif, do_endif):
Update to new scheme.
(validate_else): Skip rest of line here, unconditionally.
(_cpp_unwind_if_stack): The stack is per-buffer.  Force
pfile->skipping off.

(all): Remove `scare quotes' from error messages.

* gcc.dg/cpp-mi.c: Add another case, cpp-mix.h, where the
guard macro is already defined when the header is first
included.
* gcc.dg/cpp-mix.h: New file.
* gcc.dg/endif-label.c: Update patterns to match compiler.

* g++.brendan/complex1.C: Declare abort.
* g++.law/refs4.C: Remove XFAIL.
* g++.oliva/expr2.C: Declare abort and exit.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@34253 138bc75d-0d04-0410-961f-82ee72b054a4
13 files changed:
gcc/ChangeLog
gcc/cppfiles.c
gcc/cpphash.h
gcc/cpplex.c
gcc/cpplib.c
gcc/cpplib.h
gcc/testsuite/ChangeLog
gcc/testsuite/g++.old-deja/g++.brendan/complex1.C
gcc/testsuite/g++.old-deja/g++.law/refs4.C
gcc/testsuite/g++.old-deja/g++.oliva/expr2.C
gcc/testsuite/gcc.dg/cpp-mi.c
gcc/testsuite/gcc.dg/cpp-mix.h [new file with mode: 0644]
gcc/testsuite/gcc.dg/endif-label.c