@@ -37,12 +37,6 @@ class Decorator : public __sanitizer::SanitizerCommonDecorator {
3737 const char *FunctionName () const { return Green (); }
3838 const char *Reason () const { return Blue (); }
3939};
40-
41- template <class ... Ts> struct Overloaded : Ts... {
42- using Ts::operator ()...;
43- };
44- // TODO: Remove below when c++20
45- template <class ... Ts> Overloaded (Ts...) -> Overloaded<Ts...>;
4640} // namespace
4741
4842static void PrintStackTrace (uptr pc, uptr bp) {
@@ -53,35 +47,39 @@ static void PrintStackTrace(uptr pc, uptr bp) {
5347}
5448
5549static void PrintError (const Decorator &decorator,
56- const DiagnosticsCallerInfo &info) {
57- const char *violation_type = std::visit (
58- Overloaded{
59- [](const InterceptedCallInfo &) { return " unsafe-library-call" ; },
60- [](const BlockingCallInfo &) { return " blocking-call" ; }},
61- info);
50+ const DiagnosticsInfo &info) {
51+ const auto ErrorTypeStr = [&info]() -> const char * {
52+ switch (info.type ) {
53+ case DiagnosticsInfoType::InterceptedCall:
54+ return " unsafe-library-call" ;
55+ case DiagnosticsInfoType::BlockingCall:
56+ return " blocking-call" ;
57+ }
58+ return " (unknown error)" ;
59+ };
6260
6361 Printf (" %s" , decorator.Error ());
64- Report (" ERROR: RealtimeSanitizer: %s\n " , violation_type );
62+ Report (" ERROR: RealtimeSanitizer: %s\n " , ErrorTypeStr () );
6563}
6664
6765static void PrintReason (const Decorator &decorator,
68- const DiagnosticsCallerInfo &info) {
66+ const DiagnosticsInfo &info) {
6967 Printf (" %s" , decorator.Reason ());
7068
71- std::visit (
72- Overloaded{[decorator]( const InterceptedCallInfo &call) {
73- Printf (" Intercepted call to real-time unsafe function "
74- " `%s%s%s` in real-time context!" ,
75- decorator.FunctionName (),
76- call. intercepted_function_name_ , decorator. Reason ()) ;
77- },
78- [decorator]( const BlockingCallInfo &arg) {
79- Printf (" Call to blocking function "
80- " `%s%s%s` in real-time context!" ,
81- decorator.FunctionName (), arg. blocking_function_name_ ,
82- decorator. Reason ()) ;
83- }},
84- info);
69+ switch (info. type ) {
70+ case DiagnosticsInfoType::InterceptedCall: {
71+ Printf (" Intercepted call to real-time unsafe function "
72+ " `%s%s%s` in real-time context!" ,
73+ decorator.FunctionName (), info. func_name , decorator. Reason ());
74+ break ;
75+ }
76+ case DiagnosticsInfoType::BlockingCall: {
77+ Printf (" Call to blocking function "
78+ " `%s%s%s` in real-time context!" ,
79+ decorator.FunctionName (), info. func_name , decorator. Reason ());
80+ break ;
81+ }
82+ }
8583
8684 Printf (" \n " );
8785}
@@ -90,8 +88,8 @@ void __rtsan::PrintDiagnostics(const DiagnosticsInfo &info) {
9088 ScopedErrorReportLock l;
9189
9290 Decorator d;
93- PrintError (d, info. call_info );
94- PrintReason (d, info. call_info );
91+ PrintError (d, info);
92+ PrintReason (d, info);
9593 Printf (" %s" , d.Default ());
9694 PrintStackTrace (info.pc , info.bp );
9795}
0 commit comments