[tree.c] Replace cast to (char *) by const_cast<char *>

Message ID CAAgBjMnCKFPthT-6zs+hm=WuWJEEA4ntYyiEyT3jq-Sp4Mtspg@mail.gmail.com
State New
Headers show
Series
  • [tree.c] Replace cast to (char *) by const_cast<char *>
Related show

Commit Message

Prathamesh Kulkarni June 18, 2018, 1:55 p.m.
Hi,
I am getting the following build error with trunk:
../../gcc/gcc/tree.c: In member function ‘void
escaped_string::escape(const char*)’:
../../gcc/gcc/tree.c:12457:20: error: cast from type ‘const char*’ to
type ‘char*’ casts away qualifiers [-Werror=cast-qual]
   m_str = (char *) unescaped;
                    ^~~~~~~~~
I think this is caused by r261697 in tree.c:
  m_str = (char *) unescaped;

The patch changes it to const_cast<char *> (unescaped) which fixes the
build for me.
OK to commit ?

Thanks,
Prathamesh

Comments

Nick Clifton June 18, 2018, 1:58 p.m. | #1
Hi Prathamesh,

> I am getting the following build error with trunk:

> ../../gcc/gcc/tree.c: In member function ‘void

> escaped_string::escape(const char*)’:

> ../../gcc/gcc/tree.c:12457:20: error: cast from type ‘const char*’ to

> type ‘char*’ casts away qualifiers [-Werror=cast-qual]

>    m_str = (char *) unescaped;

>                     ^~~~~~~~~

> I think this is caused by r261697 in tree.c:

>   m_str = (char *) unescaped;

> 

> The patch changes it to const_cast<char *> (unescaped) which fixes the

> build for me.


I cannot approve this patch, but I can say thanks very much for catching
this problem and proposing a fix.  I guess that I must be using an old
version of g++ for my testing as this error did not show up. :-(

Cheers
  Nick
Prathamesh Kulkarni June 18, 2018, 2:08 p.m. | #2
On 18 June 2018 at 19:28, Nick Clifton <nickc@redhat.com> wrote:
> Hi Prathamesh,

>

>> I am getting the following build error with trunk:

>> ../../gcc/gcc/tree.c: In member function ‘void

>> escaped_string::escape(const char*)’:

>> ../../gcc/gcc/tree.c:12457:20: error: cast from type ‘const char*’ to

>> type ‘char*’ casts away qualifiers [-Werror=cast-qual]

>>    m_str = (char *) unescaped;

>>                     ^~~~~~~~~

>> I think this is caused by r261697 in tree.c:

>>   m_str = (char *) unescaped;

>>

>> The patch changes it to const_cast<char *> (unescaped) which fixes the

>> build for me.

>

> I cannot approve this patch, but I can say thanks very much for catching

> this problem and proposing a fix.  I guess that I must be using an old

> version of g++ for my testing as this error did not show up. :-(

Hi Nick,
Thanks for confirming. I went ahead and committed the patch in r261700
since I guess it's trivial enough to fit under the "obvious" rule.

Thanks,
Prathamesh
>

> Cheers

>   Nick

>

>
Jeff Law June 18, 2018, 2:34 p.m. | #3
On 06/18/2018 08:08 AM, Prathamesh Kulkarni wrote:
> On 18 June 2018 at 19:28, Nick Clifton <nickc@redhat.com> wrote:

>> Hi Prathamesh,

>>

>>> I am getting the following build error with trunk:

>>> ../../gcc/gcc/tree.c: In member function ‘void

>>> escaped_string::escape(const char*)’:

>>> ../../gcc/gcc/tree.c:12457:20: error: cast from type ‘const char*’ to

>>> type ‘char*’ casts away qualifiers [-Werror=cast-qual]

>>>    m_str = (char *) unescaped;

>>>                     ^~~~~~~~~

>>> I think this is caused by r261697 in tree.c:

>>>   m_str = (char *) unescaped;

>>>

>>> The patch changes it to const_cast<char *> (unescaped) which fixes the

>>> build for me.

>>

>> I cannot approve this patch, but I can say thanks very much for catching

>> this problem and proposing a fix.  I guess that I must be using an old

>> version of g++ for my testing as this error did not show up. :-(

> Hi Nick,

> Thanks for confirming. I went ahead and committed the patch in r261700

> since I guess it's trivial enough to fit under the "obvious" rule.

Yes.

Thanks for taking care of it.

jeff
Jakub Jelinek June 18, 2018, 4:41 p.m. | #4
On Mon, Jun 18, 2018 at 08:34:28AM -0600, Jeff Law wrote:
> On 06/18/2018 08:08 AM, Prathamesh Kulkarni wrote:

> > On 18 June 2018 at 19:28, Nick Clifton <nickc@redhat.com> wrote:

> >> Hi Prathamesh,

> >>

> >>> I am getting the following build error with trunk:

> >>> ../../gcc/gcc/tree.c: In member function ‘void

> >>> escaped_string::escape(const char*)’:

> >>> ../../gcc/gcc/tree.c:12457:20: error: cast from type ‘const char*’ to

> >>> type ‘char*’ casts away qualifiers [-Werror=cast-qual]

> >>>    m_str = (char *) unescaped;

> >>>                     ^~~~~~~~~

> >>> I think this is caused by r261697 in tree.c:

> >>>   m_str = (char *) unescaped;

> >>>

> >>> The patch changes it to const_cast<char *> (unescaped) which fixes the

> >>> build for me.

> >>

> >> I cannot approve this patch, but I can say thanks very much for catching

> >> this problem and proposing a fix.  I guess that I must be using an old

> >> version of g++ for my testing as this error did not show up. :-(

> > Hi Nick,

> > Thanks for confirming. I went ahead and committed the patch in r261700

> > since I guess it's trivial enough to fit under the "obvious" rule.

> Yes.

> 

> Thanks for taking care of it.


Shouldn't we use
  m_str = CONST_CAST (char *, unescaped);
instead?  That is what most similar spots use.

	Jakub
Jason Merrill June 18, 2018, 5:48 p.m. | #5
On Mon, Jun 18, 2018 at 12:41 PM, Jakub Jelinek <jakub@redhat.com> wrote:
> On Mon, Jun 18, 2018 at 08:34:28AM -0600, Jeff Law wrote:

>> On 06/18/2018 08:08 AM, Prathamesh Kulkarni wrote:

>> > On 18 June 2018 at 19:28, Nick Clifton <nickc@redhat.com> wrote:

>> >> Hi Prathamesh,

>> >>

>> >>> I am getting the following build error with trunk:

>> >>> ../../gcc/gcc/tree.c: In member function ‘void

>> >>> escaped_string::escape(const char*)’:

>> >>> ../../gcc/gcc/tree.c:12457:20: error: cast from type ‘const char*’ to

>> >>> type ‘char*’ casts away qualifiers [-Werror=cast-qual]

>> >>>    m_str = (char *) unescaped;

>> >>>                     ^~~~~~~~~

>> >>> I think this is caused by r261697 in tree.c:

>> >>>   m_str = (char *) unescaped;

>> >>>

>> >>> The patch changes it to const_cast<char *> (unescaped) which fixes the

>> >>> build for me.

>> >>

>> >> I cannot approve this patch, but I can say thanks very much for catching

>> >> this problem and proposing a fix.  I guess that I must be using an old

>> >> version of g++ for my testing as this error did not show up. :-(

>> > Hi Nick,

>> > Thanks for confirming. I went ahead and committed the patch in r261700

>> > since I guess it's trivial enough to fit under the "obvious" rule.

>> Yes.

>>

>> Thanks for taking care of it.

>

> Shouldn't we use

>   m_str = CONST_CAST (char *, unescaped);

> instead?  That is what most similar spots use.


That macro seems obsolete now that we compile as C++.

Jason
Jakub Jelinek June 18, 2018, 5:51 p.m. | #6
On Mon, Jun 18, 2018 at 01:48:05PM -0400, Jason Merrill wrote:
> On Mon, Jun 18, 2018 at 12:41 PM, Jakub Jelinek <jakub@redhat.com> wrote:

> > On Mon, Jun 18, 2018 at 08:34:28AM -0600, Jeff Law wrote:

> >> On 06/18/2018 08:08 AM, Prathamesh Kulkarni wrote:

> >> > On 18 June 2018 at 19:28, Nick Clifton <nickc@redhat.com> wrote:

> >> >> Hi Prathamesh,

> >> >>

> >> >>> I am getting the following build error with trunk:

> >> >>> ../../gcc/gcc/tree.c: In member function ‘void

> >> >>> escaped_string::escape(const char*)’:

> >> >>> ../../gcc/gcc/tree.c:12457:20: error: cast from type ‘const char*’ to

> >> >>> type ‘char*’ casts away qualifiers [-Werror=cast-qual]

> >> >>>    m_str = (char *) unescaped;

> >> >>>                     ^~~~~~~~~

> >> >>> I think this is caused by r261697 in tree.c:

> >> >>>   m_str = (char *) unescaped;

> >> >>>

> >> >>> The patch changes it to const_cast<char *> (unescaped) which fixes the

> >> >>> build for me.

> >> >>

> >> >> I cannot approve this patch, but I can say thanks very much for catching

> >> >> this problem and proposing a fix.  I guess that I must be using an old

> >> >> version of g++ for my testing as this error did not show up. :-(

> >> > Hi Nick,

> >> > Thanks for confirming. I went ahead and committed the patch in r261700

> >> > since I guess it's trivial enough to fit under the "obvious" rule.

> >> Yes.

> >>

> >> Thanks for taking care of it.

> >

> > Shouldn't we use

> >   m_str = CONST_CAST (char *, unescaped);

> > instead?  That is what most similar spots use.

> 

> That macro seems obsolete now that we compile as C++.


But shouldn't we then remove/poison those macros and replace all uses?
I don't care much if we use CONST_CAST or const_cast, but care about
consistency.

	Jakub
Jason Merrill June 18, 2018, 5:58 p.m. | #7
On Mon, Jun 18, 2018 at 1:51 PM, Jakub Jelinek <jakub@redhat.com> wrote:
> On Mon, Jun 18, 2018 at 01:48:05PM -0400, Jason Merrill wrote:

>> On Mon, Jun 18, 2018 at 12:41 PM, Jakub Jelinek <jakub@redhat.com> wrote:

>> > On Mon, Jun 18, 2018 at 08:34:28AM -0600, Jeff Law wrote:

>> >> On 06/18/2018 08:08 AM, Prathamesh Kulkarni wrote:

>> >> > On 18 June 2018 at 19:28, Nick Clifton <nickc@redhat.com> wrote:

>> >> >> Hi Prathamesh,

>> >> >>

>> >> >>> I am getting the following build error with trunk:

>> >> >>> ../../gcc/gcc/tree.c: In member function ‘void

>> >> >>> escaped_string::escape(const char*)’:

>> >> >>> ../../gcc/gcc/tree.c:12457:20: error: cast from type ‘const char*’ to

>> >> >>> type ‘char*’ casts away qualifiers [-Werror=cast-qual]

>> >> >>>    m_str = (char *) unescaped;

>> >> >>>                     ^~~~~~~~~

>> >> >>> I think this is caused by r261697 in tree.c:

>> >> >>>   m_str = (char *) unescaped;

>> >> >>>

>> >> >>> The patch changes it to const_cast<char *> (unescaped) which fixes the

>> >> >>> build for me.

>> >> >>

>> >> >> I cannot approve this patch, but I can say thanks very much for catching

>> >> >> this problem and proposing a fix.  I guess that I must be using an old

>> >> >> version of g++ for my testing as this error did not show up. :-(

>> >> > Hi Nick,

>> >> > Thanks for confirming. I went ahead and committed the patch in r261700

>> >> > since I guess it's trivial enough to fit under the "obvious" rule.

>> >> Yes.

>> >>

>> >> Thanks for taking care of it.

>> >

>> > Shouldn't we use

>> >   m_str = CONST_CAST (char *, unescaped);

>> > instead?  That is what most similar spots use.

>>

>> That macro seems obsolete now that we compile as C++.

>

> But shouldn't we then remove/poison those macros and replace all uses?

> I don't care much if we use CONST_CAST or const_cast, but care about

> consistency.


That would make sense.

Jason

Patch

diff --git a/gcc/tree.c b/gcc/tree.c
index 6728f1c..889d88c 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -12454,7 +12454,7 @@  escaped_string::escape (const char *unescaped)
   if (m_owned)
     free (m_str);
 
-  m_str = (char *) unescaped;
+  m_str = const_cast<char *> (unescaped);
   m_owned = false;
 
   if (unescaped == NULL || *unescaped == 0)