Fix ICE when calling static and static function pointers

Fixes #8588
Fixed -Z print-link-args
Add assertions and cross crate tests
std::str: Bench test for char iterators
std::str: Small fix for slice
std::str: Special case char_range_at_reverse so it is faster

Implement char_range_at_reverse similarly to char_range_at, instead of
re-using that method.
std::str: Add str::raw::slice_unchecked

Add a function like raw::slice_bytes, but it doesn't check slice
boundaries. For iterator use where we always know the begin, end indices
are in range.
std::str: Implement CharIterator separately

Let CharIterator be a separate type from CharOffsetIterator (so that
CharIterator can be cloned, for example).

Implement CharOffsetIterator by using the same technique as the method
subslice_offset.
std::str: Use CharOffsetIterator in .find() and .rfind()
std::str: Correct docstrings for lack of null terminator in ~str and &str
std::str: Only check char boundary for end index in .slice_to()
std::str: Use CharOffsetIterator in slice_chars
std::str: Improve comments for CharIterator
Fix some parsing errors in extra::url

Fixes issue #8612.
std::str: Use iterators instead of while loops for CharSplitIterator

Embed an iterator in the CharSplitIterator struct, and combine that with
the former bool `only_ascii`; so use an enum instead.
Remove discriminant symbols.

Given that bootstrapping and running the testsuite works without
exporting discriminant values as global constants, I conclude that
they're unused and can be removed.
Don't skip token after @'static

Fixes #8615.
Fix broken rusti

Commit 0932ab336 accidentally broke rusti by making it parse the binary
name as the input, instead of parsing what the user typed.
Rename functional-struct-update.rs to avoid tripping Windows installer detector.
(The "update" keyword in the test name makes Windows want to run it with elevated privileges, which fails of course)
Android: Change directory before running tests