The test leaks memory on arm/arm64/riscv because alloca is replaced by malloc and the memory is not freed for test16 and test17.
Unified · Split
| @@ -204,14 +204,15 @@ int test15(void) · 203 unmodified lines | ||
| 204 | 204 | int test16() |
| 205 | 205 | { |
| 206 | 206 | char *demo = "This is only a test."; |
| 207 | − char *p; | |
| 207 | + char *p, *q; | |
| 208 | 208 | |
| 209 | 209 | p = alloca(16); |
| 210 | 210 | strcpy(p,"12345678901234"); |
| 211 | 211 | |
| 212 | 212 | /* Test alloca embedded in a larger expression */ |
| 213 | − printf("alloca : %s : %s\n", p, strcpy(alloca(strlen(demo)+1),demo) ); | |
| 213 | + printf("alloca : %s : %s\n", p, strcpy(q=alloca(strlen(demo)+1),demo) ); | |
| 214 | 214 | allocf(p); |
| 215 | + allocf(q); | |
| 215 | 216 | |
| 216 | 217 | return 0; |
| 217 | 218 | } |
| @@ -220,14 +221,15 @@ int test16() · 2 unmodified lines | ||
| 220 | 221 | int test17() |
| 221 | 222 | { |
| 222 | 223 | char *demo = "This is only a test."; |
| 223 | − char *p; | |
| 224 | + char *p, *q; | |
| 224 | 225 | |
| 225 | 226 | p = alloca(16); |
| 226 | 227 | strcpy(p,"12345678901234"); |
| 227 | 228 | |
| 228 | 229 | /* Test alloca embedded in a larger expression */ |
| 229 | − printf("alloca : %s : %s\n", p, strcpy(alloca(strlen(demo)),demo) ); | |
| 230 | + printf("alloca : %s : %s\n", p, strcpy(q=alloca(strlen(demo)),demo) ); | |
| 230 | 231 | allocf(p); |
| 232 | + allocf(q); | |
| 231 | 233 | |
| 232 | 234 | return 0; |
| 233 | 235 | } |