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().