diff options
Diffstat (limited to 'test/Analysis/inlining/inline-defensive-checks.c')
-rw-r--r-- | test/Analysis/inlining/inline-defensive-checks.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/test/Analysis/inlining/inline-defensive-checks.c b/test/Analysis/inlining/inline-defensive-checks.c index aa7f700..4ce783c 100644 --- a/test/Analysis/inlining/inline-defensive-checks.c +++ b/test/Analysis/inlining/inline-defensive-checks.c @@ -110,3 +110,32 @@ void testConstantOffset(char *value) { cursor++; } } + +// Ensure idc works for integer zero values (ex: suppressed div by zero). +void idcZero(int assume) { + if (assume) + ; +} + +int idcTriggerZeroValue(int m) { + idcZero(m); + return 5/m; // no-warning +} + +int idcTriggerZeroValueThroughCall(int i) { + return 5/i; // no-warning +} +void idcTrackZeroValueThroughCall(int x) { + idcZero(x); + idcTriggerZeroValueThroughCall(x); +} + +int idcTriggerZeroThroughDoubleAssignemnt(int i) { + return 5/i; // no-warning +} +void idcTrackZeroThroughDoubleAssignemnt(int x) { + idcZero(x); + int y = x; + int z = y; + idcTriggerZeroValueThroughCall(z); +} |