On Mon, Aug 27, 2012 at 09:52:04AM +0200, Dodji Seketeli wrote:
> PING^2.

This is ok for trunk.  Thanks.

> > Bootstrapped and tested on x86_64-unknown-linux-gnu against trunk.
> >
> > libcpp/
> >
> >     PR preprocessor/53469
> >     * directives.c (do_pragma): Use the virtual location for the
> >     pragma token, instead of its spelling location.
> >
> > gcc/testsuite/
> >
> >     PR preprocessor/53469
> >     * gcc.dg/cpp/_Pragma7.c: New test case.
> > ---
> >  gcc/testsuite/ChangeLog             |    5 +++++
> >  gcc/testsuite/gcc.dg/cpp/_Pragma7.c |   14 ++++++++++++++
> >  libcpp/ChangeLog                    |    6 ++++++
> >  libcpp/directives.c                 |    8 +++++---
> >  4 files changed, 30 insertions(+), 3 deletions(-)
> >  create mode 100644 gcc/testsuite/gcc.dg/cpp/_Pragma7.c
> >
> > diff --git a/gcc/testsuite/gcc.dg/cpp/_Pragma7.c 
> > b/gcc/testsuite/gcc.dg/cpp/_Pragma7.c
> > new file mode 100644
> > index 0000000..a7a5b1b
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.dg/cpp/_Pragma7.c
> > @@ -0,0 +1,14 @@
> > +/*
> > +  Origin: PR preprocessor/53469
> > +  { dg-do compile }
> > + */
> > +
> > +#define STRINGIFY(x) #x
> > +#define TEST(x) \
> > +  _Pragma(STRINGIFY(GCC diagnostic ignored "-Wunused-local-typedefs")) \
> > +  typedef int myint;
> > +
> > +void bar ()
> > +{
> > +  TEST(myint)
> > +}
> > diff --git a/libcpp/directives.c b/libcpp/directives.c
> > index e46280e..cd880f1 100644
> > --- a/libcpp/directives.c
> > +++ b/libcpp/directives.c
> > @@ -1347,13 +1347,15 @@ static void
> >  do_pragma (cpp_reader *pfile)
> >  {
> >    const struct pragma_entry *p = NULL;
> > -  const cpp_token *token, *pragma_token = pfile->cur_token;
> > +  const cpp_token *token, *pragma_token;
> > +  source_location pragma_token_virt_loc = 0;
> >    cpp_token ns_token;
> >    unsigned int count = 1;
> >  
> >    pfile->state.prevent_expansion++;
> >  
> > -  token = cpp_get_token (pfile);
> > +  pragma_token = token = cpp_get_token_with_location (pfile,
> > +                                                 &pragma_token_virt_loc);
> >    ns_token = *token;
> >    if (token->type == CPP_NAME)
> >      {
> > @@ -1407,7 +1409,7 @@ do_pragma (cpp_reader *pfile)
> >      {
> >        if (p->is_deferred)
> >     {
> > -     pfile->directive_result.src_loc = pragma_token->src_loc;
> > +     pfile->directive_result.src_loc = pragma_token_virt_loc;
> >       pfile->directive_result.type = CPP_PRAGMA;
> >       pfile->directive_result.flags = pragma_token->flags;
> >       pfile->directive_result.val.pragma = p->u.ident;
> 
> -- 
>               Dodji

        Jakub

Reply via email to