Merge pull request #4162 from jbj/ssa-ref-parameters

C++: SSA and range analysis for reference parameters
This commit is contained in:
Mathias Vorreiter Pedersen
2020-09-01 11:48:41 +02:00
committed by GitHub
6 changed files with 78 additions and 10 deletions

View File

@@ -573,3 +573,15 @@
| test.cpp:75:22:75:30 | c_times_2 | 0 |
| test.cpp:77:5:77:13 | c_times_2 | 0 |
| test.cpp:79:3:79:11 | c_times_2 | 0 |
| test.cpp:83:16:83:22 | aliased | -2147483648 |
| test.cpp:85:7:85:7 | i | -2147483648 |
| test.cpp:86:12:86:12 | i | 2 |
| test.cpp:88:7:88:8 | ci | -2147483648 |
| test.cpp:89:12:89:13 | ci | 2 |
| test.cpp:91:7:91:13 | aliased | -2147483648 |
| test.cpp:92:12:92:18 | aliased | -2147483648 |
| test.cpp:94:7:94:11 | alias | -2147483648 |
| test.cpp:95:12:95:16 | alias | -2147483648 |
| test.cpp:97:10:97:10 | i | -2147483648 |
| test.cpp:97:22:97:22 | i | -2147483648 |
| test.cpp:98:5:98:5 | i | -2147483648 |

View File

@@ -78,3 +78,25 @@ void use_after_cast(unsigned char c)
}
c_times_2;
}
int ref_to_number(int &i, const int &ci, int &aliased) {
int &alias = aliased; // no range analysis for either of the two aliased variables
if (i >= 2)
return i;
if (ci >= 2)
return ci;
if (aliased >= 2)
return aliased;
if (alias >= 2)
return alias;
for (; i <= 12345; i++) { // test that widening works for references
i;
}
return 0;
}

View File

@@ -573,3 +573,15 @@
| test.cpp:75:22:75:30 | c_times_2 | 510 |
| test.cpp:77:5:77:13 | c_times_2 | 510 |
| test.cpp:79:3:79:11 | c_times_2 | 510 |
| test.cpp:83:16:83:22 | aliased | 2147483647 |
| test.cpp:85:7:85:7 | i | 2147483647 |
| test.cpp:86:12:86:12 | i | 2147483647 |
| test.cpp:88:7:88:8 | ci | 2147483647 |
| test.cpp:89:12:89:13 | ci | 2147483647 |
| test.cpp:91:7:91:13 | aliased | 2147483647 |
| test.cpp:92:12:92:18 | aliased | 2147483647 |
| test.cpp:94:7:94:11 | alias | 2147483647 |
| test.cpp:95:12:95:16 | alias | 2147483647 |
| test.cpp:97:10:97:10 | i | 65535 |
| test.cpp:97:22:97:22 | i | 32767 |
| test.cpp:98:5:98:5 | i | 32767 |