@@ -1433,14 +1433,29 @@ const analysis::Constant* FoldMin(const analysis::Type* result_type,
14331433 const analysis::Constant* b,
14341434 analysis::ConstantManager*) {
14351435 if (const analysis::Integer* int_type = result_type->AsInteger ()) {
1436- if (int_type->width () == 32 ) {
1436+ if (int_type->width () <= 32 ) {
1437+ assert (
1438+ (a->AsIntConstant () != nullptr || a->AsNullConstant () != nullptr ) &&
1439+ " Must be an integer or null constant." );
1440+ assert (
1441+ (b->AsIntConstant () != nullptr || b->AsNullConstant () != nullptr ) &&
1442+ " Must be an integer or null constant." );
1443+
14371444 if (int_type->IsSigned ()) {
1438- int32_t va = a->GetS32 ();
1439- int32_t vb = b->GetS32 ();
1445+ int32_t va = (a->AsIntConstant () != nullptr )
1446+ ? a->AsIntConstant ()->GetS32BitValue ()
1447+ : 0 ;
1448+ int32_t vb = (b->AsIntConstant () != nullptr )
1449+ ? b->AsIntConstant ()->GetS32BitValue ()
1450+ : 0 ;
14401451 return (va < vb ? a : b);
14411452 } else {
1442- uint32_t va = a->GetU32 ();
1443- uint32_t vb = b->GetU32 ();
1453+ uint32_t va = (a->AsIntConstant () != nullptr )
1454+ ? a->AsIntConstant ()->GetU32BitValue ()
1455+ : 0 ;
1456+ uint32_t vb = (b->AsIntConstant () != nullptr )
1457+ ? b->AsIntConstant ()->GetU32BitValue ()
1458+ : 0 ;
14441459 return (va < vb ? a : b);
14451460 }
14461461 } else if (int_type->width () == 64 ) {
@@ -1473,14 +1488,29 @@ const analysis::Constant* FoldMax(const analysis::Type* result_type,
14731488 const analysis::Constant* b,
14741489 analysis::ConstantManager*) {
14751490 if (const analysis::Integer* int_type = result_type->AsInteger ()) {
1476- if (int_type->width () == 32 ) {
1491+ if (int_type->width () <= 32 ) {
1492+ assert (
1493+ (a->AsIntConstant () != nullptr || a->AsNullConstant () != nullptr ) &&
1494+ " Must be an integer or null constant." );
1495+ assert (
1496+ (b->AsIntConstant () != nullptr || b->AsNullConstant () != nullptr ) &&
1497+ " Must be an integer or null constant." );
1498+
14771499 if (int_type->IsSigned ()) {
1478- int32_t va = a->GetS32 ();
1479- int32_t vb = b->GetS32 ();
1500+ int32_t va = (a->AsIntConstant () != nullptr )
1501+ ? a->AsIntConstant ()->GetS32BitValue ()
1502+ : 0 ;
1503+ int32_t vb = (b->AsIntConstant () != nullptr )
1504+ ? b->AsIntConstant ()->GetS32BitValue ()
1505+ : 0 ;
14801506 return (va > vb ? a : b);
14811507 } else {
1482- uint32_t va = a->GetU32 ();
1483- uint32_t vb = b->GetU32 ();
1508+ uint32_t va = (a->AsIntConstant () != nullptr )
1509+ ? a->AsIntConstant ()->GetU32BitValue ()
1510+ : 0 ;
1511+ uint32_t vb = (b->AsIntConstant () != nullptr )
1512+ ? b->AsIntConstant ()->GetU32BitValue ()
1513+ : 0 ;
14841514 return (va > vb ? a : b);
14851515 }
14861516 } else if (int_type->width () == 64 ) {
0 commit comments