Another problem with GCC...
Etienne Fortin
etienne.fortin at sensio.tv
Wed Nov 3 13:35:34 UTC 2004
Ok guys, I found the problem...
Since my function is declared static, GCC found out that the value
returned by it wasn't used at all after the function call (coding is not
finished yet). So it just scraped the two lines.
That was a good one to investigate.
Etienne Fortin
Sensio
-----Message d'origine-----
De : Etienne Fortin [mailto:etienne.fortin at sensio.tv]
Envoyé : 3 novembre, 2004 08:23
À : 'Etienne Fortin'
Cc : rtems-users at rtems.com
Objet : RE : Another problem with GCC...
An update on that matter...
If I add "volatile" to the char* pointer declaration of slen (line 157),
then the optimization engine keeps line 166.
Why I must use volatile on the slen pointer is beyond my comprehension!
How can GCC assume that slen is constant?
Etienne Fortin
Sensio
-----Message d'origine-----
De : Etienne Fortin [mailto:etienne.fortin at sensio.tv]
Envoyé : 2 novembre, 2004 16:32
À : rtems-users at rtems.com
Objet : Another problem with GCC...
Let's talk about another problem with GCC :) This time I suspect a
problem on my side, but I can't find it.
Can someone explain to me why the optimization engine of GCC destroy
code for line 166-167???????
148 /**
149 * Extract the file length from an initialization
packet.
150 */
151 static size_t YmodemExtractFileLength(YMODEM_PACKET*
packet)
152 {
153 int i;
154
155 // Setup pointer and string length.
- 156 int namesize = strlen((char*)packet->data);
- 157 char* slen = (char*)packet->data + namesize + 1;
158
159 // Compute file length.
- 160 int lensize = strlen(slen);
- 161 if(lensize == 0)
162 return 0;
163 int mult = 1;
164 int size = 0;
- 165 for(i = lensize-1;i >= 0;i--) {
166 size += (mult * (int)(slen[i]-'0'));
167 mult *= 10;
168 }
169
170 return size;
171 }
172
173
Maybe it's too late, I drank to much coffee, that I didn't get enough
sleep last night... But to me, the code is perfectly legal but GCC, for
some reason, thinks that lines 166-167 are not useful at all...
Etienne Fortin
Sensio
More information about the users
mailing list