https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63224
--- Comment #2 from Sebastian Huber <sebastian.hu...@embedded-brains.de> --- I think this is a false positive warning. The relevant code is: for ( i = 0; name_size && (c = msdos_get_valid_utf16_filename_character ( long_name[i]) ); ++i ) { long_name[i] = c; returned_size += MSDOS_NAME_LFN_BYTES_PER_CHAR; name_size -= MSDOS_NAME_LFN_BYTES_PER_CHAR; } if ( name_size == UTF16_NULL_SIZE && c == UTF16_NULL ) { long_name[i] = c; /* line 452 */ returned_size += MSDOS_NAME_LFN_BYTES_PER_CHAR; name_size -= MSDOS_NAME_LFN_BYTES_PER_CHAR; } With #define UTF16_NULL_SIZE 2 In case name_size == 2, then c = msdos_get_valid_utf16_filename_character(long_name[i]) must be called at least once.