I am acceptance testing ICU 66.1, ICU4C. I am building it form source tarball. I am working on Ubuntu 18.04 x86_64 fully patched. Bionic provides GCC 7.4.0.
I added -fsanitize=undefined to CFLAGS, CXXFLAGS and LDFLAGS. I then ran a make && make check.
It looks like there is some undefined behavior present:
The shifts are usually fairly easy to clear. Also see https://github.com/noloader/Build-Scripts/blob/master/patch/icu.patch .
The one I could not clear is:
uobjtest.cpp:344:5: runtime error: reference binding to null pointer of type 'const struct Normalizer2'
I also noticed .travis.yml included address and thread sanitizers, but lacks undefined behavior sanitizer. It may be a good idea to add undefined behavior sanitizer testing to Travis. It may be a good idea to use Bionic for the latest GCC compiler (i.e., os: linux and dist: bionic).