Thank you Marek  for the inputs .
>>In the future, if using diff, please also use the -p option.
We are using svn diif  and other comments are addressed .

please let us know  your take on the  revised attached patch .

Thank you
~Umesh
On Thu, Nov 15, 2018 at 12:23 AM Marek Polacek <pola...@redhat.com> wrote:
>
> On Wed, Nov 14, 2018 at 09:55:39PM +0530, Umesh Kalappa wrote:
> > My bad Marek and thank you for pointing that out.
> >
> > Please find the attached correct one (pr52869.patch) .
>
> Index: gcc/cp/ChangeLog
> ===================================================================
> --- gcc/cp/ChangeLog    (revision 266026)
> +++ gcc/cp/ChangeLog    (working copy)
> @@ -1,3 +1,9 @@
> +2018-11-14  Kamlesh Kumar  <kamleshbha...@gmail.com>
> +
> +       PR c++/52869
> +       *parser.c () :  restore the old current_class_{ptr,ref} by
> +       inject_this_parameter().
> +
>
> So the correct CL entry would look like
>
> 2018-11-14  Kamlesh Kumar  <kamleshbha...@gmail.com>
>
>         DR 1207
>         PR c++/52869
>         * parser.c (cp_parser_noexcept_specification_opt): Call
>         inject_this_parameter.
>
> or so.
>
> Index: gcc/cp/parser.c
> ===================================================================
> --- gcc/cp/parser.c     (revision 266026)
> +++ gcc/cp/parser.c     (working copy)
> @@ -24615,11 +24615,24 @@
>      {
>        tree expr;
>        cp_lexer_consume_token (parser->lexer);
> -
> +
>
> You're adding whitespaces where they shouldn't be.  Let's avoid changes like 
> these.
>
>        if (cp_lexer_peek_token (parser->lexer)->type == CPP_OPEN_PAREN)
>         {
>           matching_parens parens;
>           parens.consume_open (parser);
> +
> +         if (current_class_type)
> +              inject_this_parameter (current_class_type, TYPE_UNQUALIFIED);
> +          else
> +            {
> +              /*clear the current_class_ptr for non class type , like
> +               int foo() noexcept(*this)
> +               {
> +                 return 1;
> +               }
> +             */
> +                current_class_ptr = NULL_TREE;
> +            }
>
> I don't believe that's what Jason meant by restoring; I think you want
>
>   tree save_ccp = current_class_ptr;
>   tree save_ccr = current_class_ref;
>
>   inject_this_parameter (current_class_type, TYPE_UNQUALIFIED);
>
>   [...]
>
>   current_class_ptr = save_ccp;
>   current_class_ref = save_ccr;
>
> In the future, if using diff, please also use the -p option.
>
> Index: gcc/testsuite/ChangeLog
> ===================================================================
> --- gcc/testsuite/ChangeLog     (revision 266026)
> +++ gcc/testsuite/ChangeLog     (working copy)
> @@ -1,3 +1,8 @@
> +2018-11-14  Kamlesh Kumar  <kamleshbha...@gmail.com>
> +
> +       PR g++.dg/52869
> +       * g++.dg/pr52869.C: New.
>
> Should be "PR c++/52869".
>
> Index: gcc/testsuite/g++.dg/pr52869.C
> ===================================================================
> --- gcc/testsuite/g++.dg/pr52869.C      (nonexistent)
> +++ gcc/testsuite/g++.dg/pr52869.C      (working copy)
>
> Maybe move the test to testsuite/g++.dg/DRs?
>
> @@ -0,0 +1,26 @@
> +/* { dg-do compile } */
> +/* { dg-options "-O0 -g" } */
>
> Why these options?  I don't think you need -g.
>
> +struct S {
> +    void f() { }
> +    void g() noexcept(noexcept(f())) { }
> +    void h() noexcept(noexcept(this->f())) { }
> +};
> +
> +struct Nyan {
> +       constexpr Nyan &operator++() noexcept { return *this; }
> +       constexpr void omg() noexcept(noexcept(++*this)) {}
> +};
>
> I was hoping you'd add also a test with 'this' in noexcept in a class 
> template.
>
> This test doesn't compile on all dialects:
> FAIL: g++.dg/pr52869.C  -std=gnu++98 (test for excess errors)
> FAIL: g++.dg/pr52869.C  -std=gnu++11 (test for excess errors)
>
> You can run just the new test in all dialects using:
> GXX_TESTSUITE_STDS=98,11,14,17,2a make check-c++ RUNTESTFLAGS=dg.exp=pr52869.C
>
> The noexcept specifier is only in C++11 and newer I think.
>
> +template< typename T >
> +T sine( T const& a, T const& b ) noexcept
> +{
> +    static_assert( noexcept( T(a / sqrt(a * a  + b * b)) ), "throwing expr" 
> );
> +    return a / sqrt(a * a  + b * b);
> +}
> +
> +int foo() noexcept
> +{
> +  return 1;
> +}
> +
>
> I don't understand what this part of the test is testing.  It compiles even
> without the patch.  Let's drop it.
>
> Marek

Attachment: pr52869.patch
Description: Binary data

Reply via email to