Recently I read about Value-Oriented Programming
( https://accu.org/journals/overload/31/173/teodorescu/ )
There it is pointed out that sharing mutable data. i. e., code like

my_push_back(vec, vec[0]);

can lead to subtle errors. Of course GCC cannot change C++ to a language like 
Val that forbids such code.
From my understanding, however, sharing of mutable data can be detected by the 
compiler on caller side
(looking at the prototype of the function - are all shared arguments const or 
is there some mutable argument?)
and it might be possible to add a warning "shared mutable data".

How difficult is it to implement such a warning?

If we have such a warning, it will be possible to get some information

.) How often such code occurs in real programs?
.) Is it difficult to fix such code (e.g. by making a copy of the data before 
passing it to the function)
.) Is it possible to find all such possbible errors when the complete program 
is compiled with this warning enabled?

Even if it were not possible to detect all cases, also detecting some cases 
might prevent some bugs.

What do you think about adding a warning "shared mutable data" to GCC?

Helmut Zeisel


Reply via email to