The caller messed up patterns between en and hr.
PluralFormat returns an error when pattern is for "hr" and locale is set to "en". But, PluralFormat returns a warning when pattern is for "en" and locale is set as "hr".
PluralFormat(Locale("en"), hrPatternString, &status) ==> return error.
PluralFormat(Locale("hr"), enPatternString, &status) ==> return warning.
PluralFormat should return error if any mismatch between pattern and locale.
I can't tell what might be wrong without knowing the patterns and the error/warning codes.
Also, if this is about verifying that the set of keywords in the pattern and in the PluralRules matches, then that will definitely not be checked any more at all starting with ICU 4.8.