@@ -77,39 +77,42 @@ const char *thread_name(char *buf, int tid) {
77
77
}
78
78
79
79
static const char *ReportTypeString (ReportType typ, uptr tag) {
80
- if (typ == ReportTypeRace)
81
- return " data race" ;
82
- if (typ == ReportTypeVptrRace)
83
- return " data race on vptr (ctor/dtor vs virtual call)" ;
84
- if (typ == ReportTypeUseAfterFree)
85
- return " heap-use-after-free" ;
86
- if (typ == ReportTypeVptrUseAfterFree)
87
- return " heap-use-after-free (virtual call vs free)" ;
88
- if (typ == ReportTypeExternalRace) {
89
- const char *str = GetReportHeaderFromTag (tag);
90
- return str ? str : " race on external object" ;
80
+ switch (typ) {
81
+ case ReportTypeRace:
82
+ return " data race" ;
83
+ case ReportTypeVptrRace:
84
+ return " data race on vptr (ctor/dtor vs virtual call)" ;
85
+ case ReportTypeUseAfterFree:
86
+ return " heap-use-after-free" ;
87
+ case ReportTypeVptrUseAfterFree:
88
+ return " heap-use-after-free (virtual call vs free)" ;
89
+ case ReportTypeExternalRace: {
90
+ const char *str = GetReportHeaderFromTag (tag);
91
+ return str ? str : " race on external object" ;
92
+ }
93
+ case ReportTypeThreadLeak:
94
+ return " thread leak" ;
95
+ case ReportTypeMutexDestroyLocked:
96
+ return " destroy of a locked mutex" ;
97
+ case ReportTypeMutexDoubleLock:
98
+ return " double lock of a mutex" ;
99
+ case ReportTypeMutexInvalidAccess:
100
+ return " use of an invalid mutex (e.g. uninitialized or destroyed)" ;
101
+ case ReportTypeMutexBadUnlock:
102
+ return " unlock of an unlocked mutex (or by a wrong thread)" ;
103
+ case ReportTypeMutexBadReadLock:
104
+ return " read lock of a write locked mutex" ;
105
+ case ReportTypeMutexBadReadUnlock:
106
+ return " read unlock of a write locked mutex" ;
107
+ case ReportTypeSignalUnsafe:
108
+ return " signal-unsafe call inside of a signal" ;
109
+ case ReportTypeErrnoInSignal:
110
+ return " signal handler spoils errno" ;
111
+ case ReportTypeDeadlock:
112
+ return " lock-order-inversion (potential deadlock)" ;
113
+ // No default case so compiler warns us if we miss one
91
114
}
92
- if (typ == ReportTypeThreadLeak)
93
- return " thread leak" ;
94
- if (typ == ReportTypeMutexDestroyLocked)
95
- return " destroy of a locked mutex" ;
96
- if (typ == ReportTypeMutexDoubleLock)
97
- return " double lock of a mutex" ;
98
- if (typ == ReportTypeMutexInvalidAccess)
99
- return " use of an invalid mutex (e.g. uninitialized or destroyed)" ;
100
- if (typ == ReportTypeMutexBadUnlock)
101
- return " unlock of an unlocked mutex (or by a wrong thread)" ;
102
- if (typ == ReportTypeMutexBadReadLock)
103
- return " read lock of a write locked mutex" ;
104
- if (typ == ReportTypeMutexBadReadUnlock)
105
- return " read unlock of a write locked mutex" ;
106
- if (typ == ReportTypeSignalUnsafe)
107
- return " signal-unsafe call inside of a signal" ;
108
- if (typ == ReportTypeErrnoInSignal)
109
- return " signal handler spoils errno" ;
110
- if (typ == ReportTypeDeadlock)
111
- return " lock-order-inversion (potential deadlock)" ;
112
- return " " ;
115
+ UNREACHABLE (" missing case" );
113
116
}
114
117
115
118
#if SANITIZER_MAC
0 commit comments