Use clang fix-its to transform declarations of local variables, which are used for buffer access , to be of std::span type.
We placed a few limitations to keep the solution simple:
- it only transforms local variable declarations (no parameter declaration)
- it only considers single level pointers, i.e., pointers of type T * regardless of whether T is again a pointer.
- it only transforms to std::span types (no std::array, or std::span::iterator, or ...)
- it can only transform a VarDecl that belongs to a DeclStmt whose has a single child.
One of the purposes of keeping this patch simple enough is to first evaluate if fix-it is an appropriate approach to do the transformation.
Do we really want this method in the public interface? If the idea is to let people the user override it, maybe let's actually allow that by dropping static and adding virtual? I think this is actually a good idea, maybe if somebody uses our analysis outside of the clang binary, they may want a different placeholder.