@@ -2668,7 +2668,8 @@ void LinearScan::validateIntervals()
2668
2668
}
2669
2669
Interval* interval = getIntervalForLocalVar (i);
2670
2670
2671
- bool defined = false ;
2671
+ bool defined = false ;
2672
+ unsigned lastUseBBNum = 0 ;
2672
2673
JITDUMP (" -----------------\n " );
2673
2674
for (RefPosition* ref = interval->firstRefPosition ; ref != nullptr ; ref = ref->nextRefPosition )
2674
2675
{
@@ -2677,13 +2678,17 @@ void LinearScan::validateIntervals()
2677
2678
ref->dump (this );
2678
2679
}
2679
2680
RefType refType = ref->refType ;
2680
- if (!defined && RefTypeIsUse (refType))
2681
+ if (!defined && RefTypeIsUse (refType) && (lastUseBBNum == ref-> bbNum ) )
2681
2682
{
2682
- if (compiler-> info . compMethodName != nullptr )
2683
+ if (!ref-> lastUse )
2683
2684
{
2684
- JITDUMP (" %s: " , compiler->info .compMethodName );
2685
+ if (compiler->info .compMethodName != nullptr )
2686
+ {
2687
+ JITDUMP (" %s: " , compiler->info .compMethodName );
2688
+ }
2689
+ JITDUMP (" LocalVar V%02u: undefined use at %u\n " , interval->varNum , ref->nodeLocation );
2690
+ assert (false );
2685
2691
}
2686
- JITDUMP (" LocalVar V%02u: undefined use at %u\n " , interval->varNum , ref->nodeLocation );
2687
2692
}
2688
2693
2689
2694
// For single-def intervals, the only the first refposition should be a RefTypeDef
@@ -2696,7 +2701,8 @@ void LinearScan::validateIntervals()
2696
2701
// so we can't really check the lastUse flag
2697
2702
if (ref->lastUse )
2698
2703
{
2699
- defined = false ;
2704
+ defined = false ;
2705
+ lastUseBBNum = ref->bbNum ;
2700
2706
}
2701
2707
if (RefTypeIsDef (refType))
2702
2708
{
0 commit comments