[sanitizer] a bit more informative deadlock detector report (still lots to improve)
llvm-svn: 204115
This commit is contained in:
		
							parent
							
								
									42b233a836
								
							
						
					
					
						commit
						5c0171b811
					
				| 
						 | 
				
			
			@ -231,17 +231,25 @@ void PrintReport(const ReportDesc *rep) {
 | 
			
		|||
  Printf("%s", d.EndWarning());
 | 
			
		||||
 | 
			
		||||
  if (rep->typ == ReportTypeDeadlock) {
 | 
			
		||||
    Printf("  path: ");
 | 
			
		||||
    Printf("  Path: ");
 | 
			
		||||
    CHECK_GT(rep->mutexes.Size(), 0U);
 | 
			
		||||
    CHECK_EQ(rep->mutexes.Size() * 2, rep->stacks.Size());
 | 
			
		||||
    for (uptr i = 0; i < rep->mutexes.Size(); i++)
 | 
			
		||||
      PrintMutexShort(rep->mutexes[i], " => ");
 | 
			
		||||
    PrintMutexShort(rep->mutexes[0], "\n");
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  for (uptr i = 0; i < rep->stacks.Size(); i++) {
 | 
			
		||||
    if (i)
 | 
			
		||||
      Printf("  and:\n");
 | 
			
		||||
    PrintStack(rep->stacks[i]);
 | 
			
		||||
    PrintMutexShort(rep->mutexes[0], "\n\n");
 | 
			
		||||
    for (uptr i = 0; i < rep->mutexes.Size(); i++) {
 | 
			
		||||
      Printf("  Edge: ");
 | 
			
		||||
      PrintMutexShort(rep->mutexes[i], " => ");
 | 
			
		||||
      PrintMutexShort(rep->mutexes[(i+1) % rep->mutexes.Size()], "\n");
 | 
			
		||||
      PrintStack(rep->stacks[2*i]);
 | 
			
		||||
      PrintStack(rep->stacks[2*i+1]);
 | 
			
		||||
    }
 | 
			
		||||
  } else {
 | 
			
		||||
    for (uptr i = 0; i < rep->stacks.Size(); i++) {
 | 
			
		||||
      if (i)
 | 
			
		||||
        Printf("  and:\n");
 | 
			
		||||
      PrintStack(rep->stacks[i]);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  for (uptr i = 0; i < rep->mops.Size(); i++)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -151,7 +151,7 @@ class LockTest {
 | 
			
		|||
    Lock_0_1();
 | 
			
		||||
    Lock_1_0();
 | 
			
		||||
    // CHECK: WARNING: ThreadSanitizer: lock-order-inversion (potential deadlock)
 | 
			
		||||
    // CHECK: path: [[M1:M[0-9]+]] => [[M2:M[0-9]+]] => [[M1]]
 | 
			
		||||
    // CHECK: Path: [[M1:M[0-9]+]] => [[M2:M[0-9]+]] => [[M1]]
 | 
			
		||||
    // CHECK: Mutex [[M1]] ([[A1]]) created at:
 | 
			
		||||
    // CHECK: Mutex [[M2]] ([[A2]]) created at:
 | 
			
		||||
    // CHECK-NOT: WARNING: ThreadSanitizer:
 | 
			
		||||
| 
						 | 
				
			
			@ -169,7 +169,7 @@ class LockTest {
 | 
			
		|||
    Lock2(1, 2);
 | 
			
		||||
    Lock2(2, 0);
 | 
			
		||||
    // CHECK: WARNING: ThreadSanitizer: lock-order-inversion (potential deadlock)
 | 
			
		||||
    // CHECK: path: [[M1:M[0-9]+]] => [[M2:M[0-9]+]] => [[M3:M[0-9]+]] => [[M1]]
 | 
			
		||||
    // CHECK: Path: [[M1:M[0-9]+]] => [[M2:M[0-9]+]] => [[M3:M[0-9]+]] => [[M1]]
 | 
			
		||||
    // CHECK: Mutex [[M1]] ([[A1]]) created at:
 | 
			
		||||
    // CHECK: Mutex [[M2]] ([[A2]]) created at:
 | 
			
		||||
    // CHECK: Mutex [[M3]] ([[A3]]) created at:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue