Skip to content

Commit 6934ab5

Browse files
committed
[sanitizer] Improve VSNPrintf internal diagnostics
1 parent 705b119 commit 6934ab5

File tree

2 files changed

+15
-13
lines changed

2 files changed

+15
-13
lines changed

compiler-rt/lib/sanitizer_common/sanitizer_internal_defs.h

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -292,14 +292,16 @@ void NORETURN CheckFailed(const char *file, int line, const char *cond,
292292
u64 v1, u64 v2);
293293

294294
// Check macro
295-
#define RAW_CHECK_MSG(expr, msg) do { \
296-
if (UNLIKELY(!(expr))) { \
297-
RawWrite(msg); \
298-
Die(); \
299-
} \
300-
} while (0)
295+
#define RAW_CHECK_MSG(expr, msg, ...) \
296+
do { \
297+
if (UNLIKELY(!(expr))) { \
298+
const char* msgs[] = {msg, __VA_ARGS__}; \
299+
for (const char* m : msgs) RawWrite(m); \
300+
Die(); \
301+
} \
302+
} while (0)
301303

302-
#define RAW_CHECK(expr) RAW_CHECK_MSG(expr, #expr)
304+
#define RAW_CHECK(expr, ...) RAW_CHECK_MSG(expr, #expr "\n", __VA_ARGS__)
303305

304306
#define CHECK_IMPL(c1, op, c2) \
305307
do { \

compiler-rt/lib/sanitizer_common/sanitizer_printf.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ int VSNPrintf(char *buff, int buff_length,
129129
const char *format, va_list args) {
130130
static const char *kPrintfFormatsHelp =
131131
"Supported Printf formats: %([0-9]*)?(z|l|ll)?{d,u,x,X}; %p; "
132-
"%[-]([0-9]*)?(\\.\\*)?s; %c\n";
132+
"%[-]([0-9]*)?(\\.\\*)?s; %c\nProvided format: ";
133133
RAW_CHECK(format);
134134
RAW_CHECK(buff_length > 0);
135135
const char *buff_end = &buff[buff_length - 1];
@@ -191,30 +191,30 @@ int VSNPrintf(char *buff, int buff_length,
191191
break;
192192
}
193193
case 'p': {
194-
RAW_CHECK_MSG(!have_flags, kPrintfFormatsHelp);
194+
RAW_CHECK(!have_flags, kPrintfFormatsHelp, format);
195195
result += AppendPointer(&buff, buff_end, va_arg(args, uptr));
196196
break;
197197
}
198198
case 's': {
199-
RAW_CHECK_MSG(!have_length, kPrintfFormatsHelp);
199+
RAW_CHECK(!have_length, kPrintfFormatsHelp, format);
200200
// Only left-justified width is supported.
201201
CHECK(!have_width || left_justified);
202202
result += AppendString(&buff, buff_end, left_justified ? -width : width,
203203
precision, va_arg(args, char*));
204204
break;
205205
}
206206
case 'c': {
207-
RAW_CHECK_MSG(!have_flags, kPrintfFormatsHelp);
207+
RAW_CHECK(!have_flags, kPrintfFormatsHelp, format);
208208
result += AppendChar(&buff, buff_end, va_arg(args, int));
209209
break;
210210
}
211211
case '%' : {
212-
RAW_CHECK_MSG(!have_flags, kPrintfFormatsHelp);
212+
RAW_CHECK(!have_flags, kPrintfFormatsHelp, format);
213213
result += AppendChar(&buff, buff_end, '%');
214214
break;
215215
}
216216
default: {
217-
RAW_CHECK_MSG(false, kPrintfFormatsHelp);
217+
RAW_CHECK(false, kPrintfFormatsHelp, format);
218218
}
219219
}
220220
}

0 commit comments

Comments
 (0)