<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/108821>108821</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[Clang Libtooling] Unexpected Word Splitting
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
bajinsheng
</td>
</tr>
</table>
<pre>
I wrote a code based on libtooling to add a simple printf in each IF statement as follows:
```cpp
bool VisitIfStmt(IfStmt *If) {
FullSourceLoc FullLocation = Context->getFullLoc(If->getBeginLoc());
if (FullLocation.isValid()) {
if (Stmt *Then = If->getThen()) {
SourceLocation StartLoc = Then->getBeginLoc();
SourceLocation EndLoc = Then->getEndLoc().getLocWithOffset(1);
IfCounter++;
std::string NewIfStmt = "";
// Check if the body is a compound statement
if (isa<CompoundStmt>(Then)) {
NewIfStmt += " printf(\"Executing code block " + std::to_string(IfCounter) + "[\\n\](file://n/)");\n";
NewIfStmt += TheRewriter.getRewrittenText(SourceRange(StartLoc, EndLoc));
} else {
NewIfStmt += "{\n";
NewIfStmt += " printf(\"Executing code block " + std::to_string(IfCounter) + "[\\n\](file://n/)");\n";
NewIfStmt += TheRewriter.getRewrittenText(SourceRange(StartLoc, EndLoc));
NewIfStmt += "\n}";
}
NewIfStmt += "\n}";
TheRewriter.ReplaceText(SourceRange(StartLoc, EndLoc), NewIfStmt);
}
}
return true;
}
```
However, for this target code:
```cpp
int main (){
int a = 1;
if (a == 1)
if (a > 0)
return true;
}
```
It will be changed into

The `return` is incorrectly split.
Full test case, please see here: [test.txt](https://github.com/user-attachments/files/17012840/test.txt)
LLVM version: 36adf8ecedb64047021265a1e1730773d3b3a9e8
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMVk-P4rgT_TTmUgIlTsifA4cmNPoh9W9Xmu6dOa4cp5J4xtjIrjQ9337lhKaBZUa7qz0sinBiV5VfvXqpWHivOoO4Yss1W25mYqDeulUtvirjezTdrLbN99UOjs4SggBpG4RaeGzAGtCqJmu1Mh2QBdE0IMCr_UEjHJwy1IIygEL2sNuCJ0G4R0MgPLRWa3v0LHlg0YZFDyyLpkseDtNMba2Gz8or2rXPtCfGi-kGGH_YtYyXwPL1ZAsAsB20fraDk_hk5fj0ZKUgZQ2wZAOVNYRvNGfJY4d0Wh5jnqbW2CkzzTFehiu5iK5aYLy4jLpQ_rPQqjnbX8N5d3lH_NLjBOS8YZi553xOYgL_TMJRSCk4B5_7eJOrveE2yqNp7sSYZqcIiw7DNl8U9b-2rcdAeHwv8q6t7GAIHePrcJ3XPTWhnsmDJxck8Qse3yuWbIBxHq7baIxvGd9C1aP8FiijHiFoDpQf5bY_2ME0H-K59p44Vl6wpKpOtqNYkkfGi4nhG3ovUAXwIzA4yTUwsawY549vKAcKSUyC11Z-Gw0ZX3_kSfb3KdVRR2dWytEqJBteqootKzMOG8aLVmkMzmPWZhzKkZmR52B5ydGfsL70-AmPThG6UK_pntC84Fuo11T0T8J0OEpvUg7jFbxX-lrYLN8Aao-30g2_ezwFs1uMP3X4rxL7Y9D_MsN3WQxo8s3dtyHfXE_8Vf9L2J_woIXEv4O4-tjoViAfeK4eHNLgDJAb8CKLs8m5n58eL_7_Z4_4GspZQWsdUK88kHAd0qiJn3wSlCHYC2Xg1PMuRRvWxNho4juNe1yZFnl5r4UEg0eIRo3dSOR-rj_KdEdwVFpDjSD7QHoToNlTVMZjtlyrvehwkm1PdPBn3XaK-qFeSLtnfDt4dHNBJGQfGp9nfCu8x_FG5mUWtXk-bxPM5mmTx_O6rrN5iyjTpeBtW9fnTC__X3oElkVTRiyLQptVRlrnUJL-Dv6gFS0uPcI3Dwg9gRQeQ9UOGoVH8IjQowsFA7ZcB5MFvdE_ySu8vGGM8yjmRRoxvj2Hu5fF09Pn_8MrOq-sCdsnmWjaAiU2dZZGaR7xmGdLEWOcJ1GeJ01SJ6LEYvKeNaukKZNSzHAV5zxLi7LgyaxfNVkil0nEU6yLKMpz3saYZkkkclE0ad3O1IpHPI3KOIt5EsXlQpZ1kSIvRdkuozqrWRrhXii90Pp1v7CumynvB1zFUVHweKZFjdqPhy3OpRahwfFw7nKr4DCvh86zNNLKk_8IQYr0eEKrggc8nQ9dbLmB3wy-HVASNvDFugaeQwFDg50NTq9-UoYQ_jTMD85-RUmMb0e4YykmxK8r_kcAAAD__8ew530">