llvm-twine-local¶
Looks for local Twine variables which are prone to use after frees and
should be generally avoided.
static Twine Moo = Twine("bark") + "bah";
// becomes
static std::string Moo = (Twine("bark") + "bah").str();
The Twine does not own the memory of its contents, so it is not
recommended to use Twine created from temporary strings or string literals.
static Twine getModuleIdentifier(StringRef moduleName) {
return moduleName + "_module";
}
void foo() {
Twine result = getModuleIdentifier(std::string{"abc"} + "def");
// temporary std::string is destroyed here, result is dangling
}
After applying this fix-it hints, the code will use std::string instead of
Twine for local variables. However, Twine has lots of methods that
are incompatible with std::string, so the user may need to adjust the code
manually after applying the fix-it hints.