There are two problems:
1) FieldRef::parse() is completely responsible for initializing a newly constructed FieldRef when using the FieldRef(StringData) constructor. Right now, it's not initializing _cachedSize, resulting in undefined behavior, including test cases that fail on some platforms but not others.
2) When calling parse() on an existing FieldRef, not all of its internals get reset. In particular, parsing the empty string puts the FieldRef in an inconsistent state.