c++ - gcc optimization flag break code -


this code works fine when no optimization flag set:

#include <cstdio> int main(){   float *ptr = ({float var[10] = {1,2,3,4,5,6,7,8,9,10}; var;});   float *ptr1 = ({float var[10]; for(int i_=0;i_<10;i_++)var[i_]=i_+1; var;});   float *ptr2 = ({float var[10]; var[4]=5; var;});   printf("\n value = %f %f %f",ptr[4],ptr1[4],ptr2[4]); } 

it returns 5 5 5 expected. when optimization flag set, returns 5 0 5.

ptr1 have problem related loop. why? maybe bug?

i'm using latest, 4.8.0, tested x64, x86 other builds. same behaviour.

you're using gnu language extension, let's @ gnu documentation:

in statement expression, temporaries created within statement destroyed @ statement's end.

var destroyed every time, , pointer first element (which what's returned expressions) not safe dereference.


Comments

Popular posts from this blog

jquery - How can I dynamically add a browser tab? -

node.js - Getting the socket id,user id pair of a logged in user(s) -

keyboard - C++ GetAsyncKeyState alternative -