Summary: | Invalid read of size 1 for gfortran.dg/realloc_on_assign_5.f03 | ||
---|---|---|---|
Product: | gcc | Reporter: | Dominique d'Humieres <dominiq> |
Component: | fortran | Assignee: | Not yet assigned to anyone <unassigned> |
Status: | RESOLVED DUPLICATE | ||
Severity: | normal | CC: | tkoenig |
Priority: | P3 | ||
Version: | 4.8.0 | ||
Target Milestone: | --- | ||
Host: | Target: | ||
Build: | Known to work: | ||
Known to fail: | Last reconfirmed: |
Description
Dominique d'Humieres
2013-03-11 13:27:34 UTC
I think the problem is, that for the line a = a(2:2) 1st, a is realloced to length one and 2nd, a(2) is memmoved to a(1), but at that time a(2) is already invalid. Using -fdump-tree-original: On line 42 the realloc happens to length 1. On line 50 the memmove happens from &(*a)[2], which is not valid anymore because of the realloc on line 42. 42 a = (character(kind=1)[1:.a] *) __builtin_realloc ((void *) a, 1); 43 L.4:; 44 .a = 1; 45 D.1827 = .a; 46 if (D.1827 != 0) 47 { 48 if ((character(kind=4)) D.1827 <= 1) 49 { 50 __builtin_memmove ((void *) a, (void *) &(*a)[2]{lb: 1 sz: 1}, (character(kind=4)) D.1827); 51 } |