Currently a number of GCC warnings are emitted when building libc++. This patch fixes or ignores all of them. The primary changes are:
- Work around strict aliasing issues in typeinfo::hash_code() by using attribute((may_alias)). However I think a non-aliasing hash_code() implementation is possible. Further investigation needed.
- Add _LIBCPP_UNREACHABLE() to switch in strstream.cpp to avoid -Wpotentially-uninitialized.
- Fix -Wunused-value warning in __all by adding a void cast.
- Ignore -Wattributes for now. There are a number of real attribute issues when using GCC but enabling the warning is too noisy.
- Ignore -Wliteral-suffix since it warns about the use of reserved identifiers. Note Only GCC 7.0 supports disabling this warning.
- Ignore -Wc++14-compat since it warns about the sized new/delete overloads.