aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2011-01-04 23:18:12 +0000
committerEric Botcazou <ebotcazou@gcc.gnu.org>2011-01-04 23:18:12 +0000
commitc5a62c6fde09060ca31dc302807d1f49fb95eacf (patch)
tree65c6ea81e590957df7711f8d5092ee7836531093
parentc7f15f802ae87838bdd4491189a4c9fa7d31040e (diff)
downloadgcc-c5a62c6fde09060ca31dc302807d1f49fb95eacf.zip
gcc-c5a62c6fde09060ca31dc302807d1f49fb95eacf.tar.gz
gcc-c5a62c6fde09060ca31dc302807d1f49fb95eacf.tar.bz2
re PR preprocessor/39213 (Preprocessor ICE with -m64 and --traditional-cpp)
PR preprocessor/39213 * directives.c (end_directive): Call _cpp_remove_overlay for deferred pragmas as well in traditional mode. Co-Authored-By: Jakub Jelinek <jakub@redhat.com> From-SVN: r168490
-rw-r--r--libcpp/ChangeLog7
-rw-r--r--libcpp/directives.c9
2 files changed, 12 insertions, 4 deletions
diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog
index 06fd94a..e90f753 100644
--- a/libcpp/ChangeLog
+++ b/libcpp/ChangeLog
@@ -1,3 +1,10 @@
+2011-11-04 Eric Botcazou <ebotcazou@adacore.com>
+ Jakub Jelinek <jakub@redhat.com>
+
+ PR preprocessor/39213
+ * directives.c (end_directive): Call _cpp_remove_overlay for deferred
+ pragmas as well in traditional mode.
+
2010-11-17 Ian Lance Taylor <iant@google.com>
PR bootstrap/45538
diff --git a/libcpp/directives.c b/libcpp/directives.c
index 6462605..85a17b1 100644
--- a/libcpp/directives.c
+++ b/libcpp/directives.c
@@ -281,16 +281,17 @@ start_directive (cpp_reader *pfile)
static void
end_directive (cpp_reader *pfile, int skip_line)
{
- if (pfile->state.in_deferred_pragma)
- ;
- else if (CPP_OPTION (pfile, traditional))
+ if (CPP_OPTION (pfile, traditional))
{
/* Revert change of prepare_directive_trad. */
- pfile->state.prevent_expansion--;
+ if (!pfile->state.in_deferred_pragma)
+ pfile->state.prevent_expansion--;
if (pfile->directive != &dtable[T_DEFINE])
_cpp_remove_overlay (pfile);
}
+ else if (pfile->state.in_deferred_pragma)
+ ;
/* We don't skip for an assembler #. */
else if (skip_line)
{