|
GCC Middle and Back End API Reference
|

Data Fields | |
| tree | length |
| tree | ptr |
| gimple | stmt |
| tree | endptr |
| int | refcount |
| int | idx |
| int | first |
| int | next |
| int | prev |
| bool | writable |
| bool | dont_invalidate |
String information record.
| bool strinfo_struct::dont_invalidate |
A flag for the next maybe_invalidate that this strinfo shouldn't
be invalidated. Always cleared by maybe_invalidate.
Referenced by handle_pointer_plus().
| tree strinfo_struct::endptr |
Pointer to '\0' if known, if NULL, it can be computed as
ptr + length.
Referenced by handle_pointer_plus(), and verify_related_strinfos().
| int strinfo_struct::first |
These 3 fields are for chaining related string pointers together.
E.g. for
bl = strlen (b); dl = strlen (d); strcpy (a, b); c = a + bl;
strcpy (c, d); e = c + dl;
strinfo(a) -> strinfo(c) -> strinfo(e)
All have ->first field equal to strinfo(a)->idx and are doubly
chained through prev/next fields. The later strinfos are required
to point into the same string with zero or more bytes after
the previous pointer and all bytes in between the two pointers
must be non-zero. Functions like strcpy or memcpy are supposed
to adjust all previous strinfo lengths, but not following strinfo
lengths (those are uncertain, usually invalidated during
maybe_invalidate, except when the alias oracle knows better).
Functions like strcat on the other side adjust the whole
related strinfo chain.
They are updated lazily, so to use the chain the same first fields
and si->prev->next == si->idx needs to be verified.
Referenced by find_equal_ptrs(), handle_pointer_plus(), and verify_related_strinfos().
| int strinfo_struct::idx |
Copy of index. get_strinfo (si->idx) should return si;
Referenced by find_equal_ptrs(), and verify_related_strinfos().
| tree strinfo_struct::length |
String length of this string.
Referenced by adjust_last_stmt(), free_strinfo(), handle_builtin_strlen(), and handle_pointer_plus().
| int strinfo_struct::next |
Referenced by find_equal_ptrs(), handle_pointer_plus(), and verify_related_strinfos().
| int strinfo_struct::prev |
Referenced by find_equal_ptrs(), handle_pointer_plus(), and verify_related_strinfos().
| tree strinfo_struct::ptr |
Any of the corresponding pointers for querying alias oracle.
| int strinfo_struct::refcount |
Reference count. Any changes to strinfo entry possibly shared
with dominating basic blocks need unshare_strinfo first, except
for dont_invalidate which affects only the immediately next
maybe_invalidate.
| gimple strinfo_struct::stmt |
Statement for delayed length computation.
Referenced by free_strinfo(), and handle_pointer_plus().
| bool strinfo_struct::writable |
A flag whether the string is known to be written in the current
function.
Referenced by handle_pointer_plus().