@@ -16497,8 +16497,30 @@ no corresponding type, return an error type.
1649716497 }
1649816498 break;
1649916499 case ifc_tbs_float:
16500- check_assertion(precision == ifc_tps_default);
16501- result = float_type((a_float_kind)fk_float);
16500+ switch (precision) {
16501+ case ifc_tps_default:
16502+ result = float_type(fk_float);
16503+ break;
16504+ case ifc_tps_bit16:
16505+ result = float_type(float16_kind());
16506+ break;
16507+ case ifc_tps_bit32:
16508+ result = float_type(fk_std_float32);
16509+ break;
16510+ case ifc_tps_bit64:
16511+ result = float_type(fk_std_float64);
16512+ break;
16513+ case ifc_tps_bit128:
16514+ result = float_type(fk_std_float128);
16515+ break;
16516+ default:
16517+ { a_string err_msg("Unexpected ", str_for(precision),
16518+ " for ", str_for(basis));
16519+
16520+ ifc_unexpected(module_of(itf), err_msg);
16521+ }
16522+ goto invalid;
16523+ } /* switch */
1650216524 break;
1650316525 case ifc_tbs_double:
1650416526 if (precision == ifc_tps_long) {
@@ -24588,8 +24610,37 @@ this is needed.
2458824610 } /* switch */
2458924611 break;
2459024612 case ifc_tbs_float:
24591- check_assertion(precision == ifc_tps_default);
24592- cache_token(cache, tok_float);
24613+ switch (precision) {
24614+ case ifc_tps_default:
24615+ cache_token(cache, tok_float);
24616+ break;
24617+ case ifc_tps_bit16:
24618+ /* These types have no keyword spelling that is correct for
24619+ every dialect, so cache the resolved type directly
24620+ (mirroring the direct type loader). */
24621+ cache_resolved_type_token(cache,
24622+ float_type(float16_kind()));
24623+ break;
24624+ case ifc_tps_bit32:
24625+ cache_resolved_type_token(cache,
24626+ float_type(fk_std_float32));
24627+ break;
24628+ case ifc_tps_bit64:
24629+ cache_resolved_type_token(cache,
24630+ float_type(fk_std_float64));
24631+ break;
24632+ case ifc_tps_bit128:
24633+ cache_resolved_type_token(cache,
24634+ float_type(fk_std_float128));
24635+ break;
24636+ default:
24637+ { a_string err_msg("Unexpected ", str_for(precision),
24638+ " for ", str_for(basis));
24639+
24640+ ifc_unexpected(module_of(type), err_msg);
24641+ }
24642+ goto invalid;
24643+ } /* switch */
2459324644 break;
2459424645 case ifc_tbs_double:
2459524646 if (precision == ifc_tps_long) {
0 commit comments