Re: rationale for eliding modifications to string constants

2010-09-14 Thread Uday P. Khedker
Interesting example indeed! Replace the declaration of s to char s[] = hello; and see Hello being printed :-) The point is: in your program is is only a pointer. When you pass s as a parameter to printf, the compiler assumes that only s is being used so the (effective) assignment *s

Re: rationale for eliding modifications to string constants

2010-09-14 Thread Daniel Jacobowitz
On Tue, Sep 14, 2010 at 11:50:11PM +0530, Uday P. Khedker wrote: The point is: in your program is is only a pointer. When you pass s as a parameter to printf, the compiler assumes that only s is being used so the (effective) assignment *s = 'H' is deleted as dead code when optimization

Re: rationale for eliding modifications to string constants

2010-09-14 Thread Ian Lance Taylor
Godmar Back god...@gmail.com writes: this may be a FAQ - in my class today when discussing how gcc generates code for x86, I was stumped when I showed an example of how gcc handles attempts to modify (read-only) string literals/constants. (I'm sending this to gcc rather than gcc-help because

Re: rationale for eliding modifications to string constants

2010-09-14 Thread Axel Freyn
Hello Uday, On Tue, Sep 14, 2010 at 11:50:11PM +0530, Uday P. Khedker wrote: [..] The point is: in your program is is only a pointer. When you pass s as a parameter to printf, the compiler assumes that only s is being used so the (effective) assignment *s = 'H' is deleted as dead code

Re: rationale for eliding modifications to string constants

2010-09-14 Thread Uday P. Khedker
Attached please find two dumps t.c.032t.mergephi1 and t.c.033t.cddce1. The assignment is present in the former while it disappears in the latter. The latter dump is the output of the dead code elimination pass pass_cd_dce. So this is indeed an instance of dead code elimination. But may be you

Re: rationale for eliding modifications to string constants

2010-09-14 Thread Andrew Pinski
On Tue, Sep 14, 2010 at 11:47 AM, Uday P. Khedker u...@cse.iitb.ac.in wrote: Attached please find two dumps t.c.032t.mergephi1 and t.c.033t.cddce1. The assignment is present in the former while it disappears in the latter. The latter dump is the output of the dead code elimination pass

Re: rationale for eliding modifications to string constants

2010-09-14 Thread Uday P. Khedker
You got me there :-) Yes you are right. The reason I gave for dead code elimination is not sound! Should have thought a bit before writing :-( Uday. Axel Freyn wrote, On Wednesday 15 September 2010 12:05 AM: Hello Uday, On Tue, Sep 14, 2010 at 11:50:11PM +0530, Uday P. Khedker wrote: [..]

Re: rationale for eliding modifications to string constants

2010-09-14 Thread Godmar Back
On Tue, Sep 14, 2010 at 2:35 PM, Ian Lance Taylor i...@google.com wrote: I think this is simply a bug.  It doesn't happen with current gcc.  With gcc 4.4.3 the assignment is being eliminated because it is considered to be dead code. I agree that it is an error for gcc to simply eliminate

Re: rationale for eliding modifications to string constants

2010-09-14 Thread Dave Korn
On 14/09/2010 19:47, Uday P. Khedker wrote: But may be you are right, what facilitate dead code elimination be based on modification of read-only data. However, if that is the case, I wonder what is the reason why change happens when s is an array... Because the array, unlike the string,

Re: rationale for eliding modifications to string constants

2010-09-14 Thread Ian Lance Taylor
Andrew Pinski pins...@gmail.com writes: On Tue, Sep 14, 2010 at 11:47 AM, Uday P. Khedker u...@cse.iitb.ac.in wrote: Attached please find two dumps t.c.032t.mergephi1 and t.c.033t.cddce1. The assignment is present in the former while it disappears in the latter. The latter dump is the output