Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Probably that the original binding of p is immutable, as it would be in a functional language: you can create a new binding, but you can't actually change the value of the existing binding.


Unless there's something I don't understand, that's what the single static assignment pass does in a compiler.


New bindings live at different addresses (if you pass a pointer to one binding, and then make a new binding with a new value, the existing pointer will point to the old value and not the new binding's value) and bindings made in a loop iteration won't live to the next iteration.


This sounds like an implementation detail. What does the language spec say about the outcome.


The (C) language spec says that:

  x = 5;
  int* p = &x;
  x = 6; // new binding of x
  printf("%i\n",*p);
prints "6". If new bindings lived at different addresses, it would print "5".


Different bindings are like entirely different variables that just coincidentally share the same name.


When the SSA pass happens in the compiler it's already too late to have guaranteed certain behaviours from the source stage...

E.g. you can turn a C program into SSA, but if you have aliasing issues, it's not gonna fix them...




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: