Skip to content

Commit cad7a1b

Browse files
committed
clar: include the function name
1 parent f7250cc commit cad7a1b

File tree

25 files changed

+182
-161
lines changed

25 files changed

+182
-161
lines changed

tests/checkout/crlf.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ static int compare_file(void *payload, git_buf *actual_path)
108108
git_buf details = GIT_BUF_INIT;
109109
git_buf_printf(&details, "filename=%s, system=%s, autocrlf=%s, attrs={%s}",
110110
git_path_basename(actual_path->ptr), systype, cd->autocrlf, cd->attrs);
111-
clar__fail(__FILE__, __LINE__,
111+
clar__fail(__FILE__, __func__, __LINE__,
112112
"checked out contents did not match expected", details.ptr, 0);
113113
git_buf_dispose(&details);
114114
}

tests/clar.c

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ fixture_path(const char *base, const char *fixture_name);
9696

9797
struct clar_error {
9898
const char *file;
99+
const char *function;
99100
size_t line_number;
100101
const char *error_msg;
101102
char *description;
@@ -603,6 +604,7 @@ void clar__skip(void)
603604

604605
void clar__fail(
605606
const char *file,
607+
const char *function,
606608
size_t line,
607609
const char *error_msg,
608610
const char *description,
@@ -619,6 +621,7 @@ void clar__fail(
619621
_clar.last_report->last_error = error;
620622

621623
error->file = file;
624+
error->function = function;
622625
error->line_number = line;
623626
error->error_msg = error_msg;
624627

@@ -635,6 +638,7 @@ void clar__fail(
635638
void clar__assert(
636639
int condition,
637640
const char *file,
641+
const char *function,
638642
size_t line,
639643
const char *error_msg,
640644
const char *description,
@@ -643,11 +647,12 @@ void clar__assert(
643647
if (condition)
644648
return;
645649

646-
clar__fail(file, line, error_msg, description, should_abort);
650+
clar__fail(file, function, line, error_msg, description, should_abort);
647651
}
648652

649653
void clar__assert_equal(
650654
const char *file,
655+
const char *function,
651656
size_t line,
652657
const char *err,
653658
int should_abort,
@@ -758,7 +763,7 @@ void clar__assert_equal(
758763
va_end(args);
759764

760765
if (!is_equal)
761-
clar__fail(file, line, err, buf, should_abort);
766+
clar__fail(file, function, line, err, buf, should_abort);
762767
}
763768

764769
void cl_set_cleanup(void (*cleanup)(void *), void *opaque)

tests/clar.h

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -86,16 +86,16 @@ const char *cl_fixture_basename(const char *fixture_name);
8686
/**
8787
* Assertion macros with explicit error message
8888
*/
89-
#define cl_must_pass_(expr, desc) clar__assert((expr) >= 0, __FILE__, __LINE__, "Function call failed: " #expr, desc, 1)
90-
#define cl_must_fail_(expr, desc) clar__assert((expr) < 0, __FILE__, __LINE__, "Expected function call to fail: " #expr, desc, 1)
91-
#define cl_assert_(expr, desc) clar__assert((expr) != 0, __FILE__, __LINE__, "Expression is not true: " #expr, desc, 1)
89+
#define cl_must_pass_(expr, desc) clar__assert((expr) >= 0, __FILE__, __func__, __LINE__, "Function call failed: " #expr, desc, 1)
90+
#define cl_must_fail_(expr, desc) clar__assert((expr) < 0, __FILE__, __func__, __LINE__, "Expected function call to fail: " #expr, desc, 1)
91+
#define cl_assert_(expr, desc) clar__assert((expr) != 0, __FILE__, __func__, __LINE__, "Expression is not true: " #expr, desc, 1)
9292

9393
/**
9494
* Check macros with explicit error message
9595
*/
96-
#define cl_check_pass_(expr, desc) clar__assert((expr) >= 0, __FILE__, __LINE__, "Function call failed: " #expr, desc, 0)
97-
#define cl_check_fail_(expr, desc) clar__assert((expr) < 0, __FILE__, __LINE__, "Expected function call to fail: " #expr, desc, 0)
98-
#define cl_check_(expr, desc) clar__assert((expr) != 0, __FILE__, __LINE__, "Expression is not true: " #expr, desc, 0)
96+
#define cl_check_pass_(expr, desc) clar__assert((expr) >= 0, __FILE__, __func__, __LINE__, "Function call failed: " #expr, desc, 0)
97+
#define cl_check_fail_(expr, desc) clar__assert((expr) < 0, __FILE__, __func__, __LINE__, "Expected function call to fail: " #expr, desc, 0)
98+
#define cl_check_(expr, desc) clar__assert((expr) != 0, __FILE__, __func__, __LINE__, "Expression is not true: " #expr, desc, 0)
9999

100100
/**
101101
* Assertion macros with no error message
@@ -114,38 +114,39 @@ const char *cl_fixture_basename(const char *fixture_name);
114114
/**
115115
* Forced failure/warning
116116
*/
117-
#define cl_fail(desc) clar__fail(__FILE__, __LINE__, "Test failed.", desc, 1)
118-
#define cl_warning(desc) clar__fail(__FILE__, __LINE__, "Warning during test execution:", desc, 0)
117+
#define cl_fail(desc) clar__fail(__FILE__, __func__, __LINE__, "Test failed.", desc, 1)
118+
#define cl_warning(desc) clar__fail(__FILE__, __func__, __LINE__, "Warning during test execution:", desc, 0)
119119

120120
#define cl_skip() clar__skip()
121121

122122
/**
123123
* Typed assertion macros
124124
*/
125-
#define cl_assert_equal_s(s1,s2) clar__assert_equal(__FILE__,__LINE__,"String mismatch: " #s1 " != " #s2, 1, "%s", (s1), (s2))
126-
#define cl_assert_equal_s_(s1,s2,note) clar__assert_equal(__FILE__,__LINE__,"String mismatch: " #s1 " != " #s2 " (" #note ")", 1, "%s", (s1), (s2))
125+
#define cl_assert_equal_s(s1,s2) clar__assert_equal(__FILE__,__func__,__LINE__,"String mismatch: " #s1 " != " #s2, 1, "%s", (s1), (s2))
126+
#define cl_assert_equal_s_(s1,s2,note) clar__assert_equal(__FILE__,__func__,__LINE__,"String mismatch: " #s1 " != " #s2 " (" #note ")", 1, "%s", (s1), (s2))
127127

128-
#define cl_assert_equal_wcs(wcs1,wcs2) clar__assert_equal(__FILE__,__LINE__,"String mismatch: " #wcs1 " != " #wcs2, 1, "%ls", (wcs1), (wcs2))
129-
#define cl_assert_equal_wcs_(wcs1,wcs2,note) clar__assert_equal(__FILE__,__LINE__,"String mismatch: " #wcs1 " != " #wcs2 " (" #note ")", 1, "%ls", (wcs1), (wcs2))
128+
#define cl_assert_equal_wcs(wcs1,wcs2) clar__assert_equal(__FILE__,__func__,__LINE__,"String mismatch: " #wcs1 " != " #wcs2, 1, "%ls", (wcs1), (wcs2))
129+
#define cl_assert_equal_wcs_(wcs1,wcs2,note) clar__assert_equal(__FILE__,__func__,__LINE__,"String mismatch: " #wcs1 " != " #wcs2 " (" #note ")", 1, "%ls", (wcs1), (wcs2))
130130

131-
#define cl_assert_equal_strn(s1,s2,len) clar__assert_equal(__FILE__,__LINE__,"String mismatch: " #s1 " != " #s2, 1, "%.*s", (s1), (s2), (int)(len))
132-
#define cl_assert_equal_strn_(s1,s2,len,note) clar__assert_equal(__FILE__,__LINE__,"String mismatch: " #s1 " != " #s2 " (" #note ")", 1, "%.*s", (s1), (s2), (int)(len))
131+
#define cl_assert_equal_strn(s1,s2,len) clar__assert_equal(__FILE__,__func__,__LINE__,"String mismatch: " #s1 " != " #s2, 1, "%.*s", (s1), (s2), (int)(len))
132+
#define cl_assert_equal_strn_(s1,s2,len,note) clar__assert_equal(__FILE__,__func__,__LINE__,"String mismatch: " #s1 " != " #s2 " (" #note ")", 1, "%.*s", (s1), (s2), (int)(len))
133133

134-
#define cl_assert_equal_wcsn(wcs1,wcs2,len) clar__assert_equal(__FILE__,__LINE__,"String mismatch: " #wcs1 " != " #wcs2, 1, "%.*ls", (wcs1), (wcs2), (int)(len))
135-
#define cl_assert_equal_wcsn_(wcs1,wcs2,len,note) clar__assert_equal(__FILE__,__LINE__,"String mismatch: " #wcs1 " != " #wcs2 " (" #note ")", 1, "%.*ls", (wcs1), (wcs2), (int)(len))
134+
#define cl_assert_equal_wcsn(wcs1,wcs2,len) clar__assert_equal(__FILE__,__func__,__LINE__,"String mismatch: " #wcs1 " != " #wcs2, 1, "%.*ls", (wcs1), (wcs2), (int)(len))
135+
#define cl_assert_equal_wcsn_(wcs1,wcs2,len,note) clar__assert_equal(__FILE__,__func__,__LINE__,"String mismatch: " #wcs1 " != " #wcs2 " (" #note ")", 1, "%.*ls", (wcs1), (wcs2), (int)(len))
136136

137-
#define cl_assert_equal_i(i1,i2) clar__assert_equal(__FILE__,__LINE__,#i1 " != " #i2, 1, "%d", (int)(i1), (int)(i2))
138-
#define cl_assert_equal_i_(i1,i2,note) clar__assert_equal(__FILE__,__LINE__,#i1 " != " #i2 " (" #note ")", 1, "%d", (i1), (i2))
139-
#define cl_assert_equal_i_fmt(i1,i2,fmt) clar__assert_equal(__FILE__,__LINE__,#i1 " != " #i2, 1, (fmt), (int)(i1), (int)(i2))
137+
#define cl_assert_equal_i(i1,i2) clar__assert_equal(__FILE__,__func__,__LINE__,#i1 " != " #i2, 1, "%d", (int)(i1), (int)(i2))
138+
#define cl_assert_equal_i_(i1,i2,note) clar__assert_equal(__FILE__,__func__,__LINE__,#i1 " != " #i2 " (" #note ")", 1, "%d", (i1), (i2))
139+
#define cl_assert_equal_i_fmt(i1,i2,fmt) clar__assert_equal(__FILE__,__func__,__LINE__,#i1 " != " #i2, 1, (fmt), (int)(i1), (int)(i2))
140140

141-
#define cl_assert_equal_b(b1,b2) clar__assert_equal(__FILE__,__LINE__,#b1 " != " #b2, 1, "%d", (int)((b1) != 0),(int)((b2) != 0))
141+
#define cl_assert_equal_b(b1,b2) clar__assert_equal(__FILE__,__func__,__LINE__,#b1 " != " #b2, 1, "%d", (int)((b1) != 0),(int)((b2) != 0))
142142

143-
#define cl_assert_equal_p(p1,p2) clar__assert_equal(__FILE__,__LINE__,"Pointer mismatch: " #p1 " != " #p2, 1, "%p", (p1), (p2))
143+
#define cl_assert_equal_p(p1,p2) clar__assert_equal(__FILE__,__func__,__LINE__,"Pointer mismatch: " #p1 " != " #p2, 1, "%p", (p1), (p2))
144144

145145
void clar__skip(void);
146146

147147
void clar__fail(
148148
const char *file,
149+
const char *func,
149150
size_t line,
150151
const char *error,
151152
const char *description,
@@ -154,13 +155,15 @@ void clar__fail(
154155
void clar__assert(
155156
int condition,
156157
const char *file,
158+
const char *func,
157159
size_t line,
158160
const char *error,
159161
const char *description,
160162
int should_abort);
161163

162164
void clar__assert_equal(
163165
const char *file,
166+
const char *func,
164167
size_t line,
165168
const char *err,
166169
int should_abort,

tests/clar/print.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ static void clar_print_tap_ontest(const char *test_name, int test_number, enum c
126126
printf(" at:\n");
127127
printf(" file: '"); print_escaped(error->file); printf("'\n");
128128
printf(" line: %" PRIuZ "\n", error->line_number);
129-
printf(" function: '%s::%s'\n", _clar.active_suite, test_name);
129+
printf(" function: '%s'\n", error->function);
130130
printf(" ---\n");
131131

132132
break;

tests/clar_libgit2.c

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
#include "git2/sys/repository.h"
55

66
void cl_git_report_failure(
7-
int error, int expected, const char *file, int line, const char *fncall)
7+
int error, int expected, const char *file, const char *func, int line, const char *fncall)
88
{
99
char msg[4096];
1010
const git_error *last = git_error_last();
@@ -18,7 +18,7 @@ void cl_git_report_failure(
1818
else
1919
p_snprintf(msg, 4096, "no error, expected non-zero return");
2020

21-
clar__assert(0, file, line, fncall, msg, 1);
21+
clar__assert(0, file, func, line, fncall, msg, 1);
2222
}
2323

2424
void cl_git_mkfile(const char *filename, const char *content)
@@ -507,6 +507,7 @@ void clar__assert_equal_file(
507507
int ignore_cr,
508508
const char *path,
509509
const char *file,
510+
const char *func,
510511
int line)
511512
{
512513
char buf[4000];
@@ -519,7 +520,7 @@ void clar__assert_equal_file(
519520

520521
while ((bytes = p_read(fd, buf, sizeof(buf))) != 0) {
521522
clar__assert(
522-
bytes > 0, file, line, "error reading from file", path, 1);
523+
bytes > 0, file, func, line, "error reading from file", path, 1);
523524

524525
if (ignore_cr)
525526
bytes = strip_cr_from_buf(buf, bytes);
@@ -532,7 +533,7 @@ void clar__assert_equal_file(
532533
buf, sizeof(buf), "file content mismatch at byte %"PRIdZ,
533534
(ssize_t)(total_bytes + pos));
534535
p_close(fd);
535-
clar__fail(file, line, path, buf, 1);
536+
clar__fail(file, func, line, path, buf, 1);
536537
}
537538

538539
expected_data += bytes;
@@ -541,8 +542,8 @@ void clar__assert_equal_file(
541542

542543
p_close(fd);
543544

544-
clar__assert(!bytes, file, line, "error reading from file", path, 1);
545-
clar__assert_equal(file, line, "mismatched file length", 1, "%"PRIuZ,
545+
clar__assert(!bytes, file, func, line, "error reading from file", path, 1);
546+
clar__assert_equal(file, func, line, "mismatched file length", 1, "%"PRIuZ,
546547
(size_t)expected_bytes, (size_t)total_bytes);
547548
}
548549

tests/clar_libgit2.h

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,15 @@
1212
*
1313
* Use this wrapper around all `git_` library calls that return error codes!
1414
*/
15-
#define cl_git_pass(expr) cl_git_expect((expr), 0, __FILE__, __LINE__)
15+
#define cl_git_pass(expr) cl_git_expect((expr), 0, __FILE__, __func__, __LINE__)
1616

17-
#define cl_git_fail_with(error, expr) cl_git_expect((expr), error, __FILE__, __LINE__)
17+
#define cl_git_fail_with(error, expr) cl_git_expect((expr), error, __FILE__, __func__, __LINE__)
1818

19-
#define cl_git_expect(expr, expected, file, line) do { \
19+
#define cl_git_expect(expr, expected, file, func, line) do { \
2020
int _lg2_error; \
2121
git_error_clear(); \
2222
if ((_lg2_error = (expr)) != expected) \
23-
cl_git_report_failure(_lg2_error, expected, file, line, "Function call failed: " #expr); \
23+
cl_git_report_failure(_lg2_error, expected, file, func, line, "Function call failed: " #expr); \
2424
} while (0)
2525

2626
/**
@@ -31,7 +31,7 @@
3131
#define cl_git_fail(expr) do { \
3232
if ((expr) == 0) \
3333
git_error_clear(), \
34-
cl_git_report_failure(0, 0, __FILE__, __LINE__, "Function call succeeded: " #expr); \
34+
cl_git_report_failure(0, 0, __FILE__, __func__, __LINE__, "Function call succeeded: " #expr); \
3535
} while (0)
3636

3737
/**
@@ -41,7 +41,7 @@
4141
int _win32_res; \
4242
if ((_win32_res = (expr)) == 0) { \
4343
git_error_set(GIT_ERROR_OS, "Returned: %d, system error code: %lu", _win32_res, GetLastError()); \
44-
cl_git_report_failure(_win32_res, 0, __FILE__, __LINE__, "System call failed: " #expr); \
44+
cl_git_report_failure(_win32_res, 0, __FILE__, __func__, __LINE__, "System call failed: " #expr); \
4545
} \
4646
} while(0)
4747

@@ -58,22 +58,24 @@
5858
typedef struct {
5959
int error;
6060
const char *file;
61+
const char *func;
6162
int line;
6263
const char *expr;
6364
char error_msg[4096];
6465
} cl_git_thread_err;
6566

6667
#ifdef GIT_THREADS
67-
# define cl_git_thread_pass(threaderr, expr) cl_git_thread_pass_(threaderr, (expr), __FILE__, __LINE__)
68+
# define cl_git_thread_pass(threaderr, expr) cl_git_thread_pass_(threaderr, (expr), __FILE__, __func__, __LINE__)
6869
#else
6970
# define cl_git_thread_pass(threaderr, expr) cl_git_pass(expr)
7071
#endif
7172

72-
#define cl_git_thread_pass_(__threaderr, __expr, __file, __line) do { \
73+
#define cl_git_thread_pass_(__threaderr, __expr, __file, __func, __line) do { \
7374
git_error_clear(); \
7475
if ((((cl_git_thread_err *)__threaderr)->error = (__expr)) != 0) { \
7576
const git_error *_last = git_error_last(); \
7677
((cl_git_thread_err *)__threaderr)->file = __file; \
78+
((cl_git_thread_err *)__threaderr)->func = __func; \
7779
((cl_git_thread_err *)__threaderr)->line = __line; \
7880
((cl_git_thread_err *)__threaderr)->expr = "Function call failed: " #__expr; \
7981
p_snprintf(((cl_git_thread_err *)__threaderr)->error_msg, 4096, "thread 0x%" PRIxZ " - error %d - %s", \
@@ -87,49 +89,51 @@ GIT_INLINE(void) cl_git_thread_check(void *data)
8789
{
8890
cl_git_thread_err *threaderr = (cl_git_thread_err *)data;
8991
if (threaderr->error != 0)
90-
clar__assert(0, threaderr->file, threaderr->line, threaderr->expr, threaderr->error_msg, 1);
92+
clar__assert(0, threaderr->file, threaderr->func, threaderr->line, threaderr->expr, threaderr->error_msg, 1);
9193
}
9294

93-
void cl_git_report_failure(int, int, const char *, int, const char *);
95+
void cl_git_report_failure(int, int, const char *, const char *, int, const char *);
9496

95-
#define cl_assert_at_line(expr,file,line) \
96-
clar__assert((expr) != 0, file, line, "Expression is not true: " #expr, NULL, 1)
97+
#define cl_assert_at_line(expr,file,func,line) \
98+
clar__assert((expr) != 0, file, func, line, "Expression is not true: " #expr, NULL, 1)
9799

98100
GIT_INLINE(void) clar__assert_in_range(
99101
int lo, int val, int hi,
100-
const char *file, int line, const char *err, int should_abort)
102+
const char *file, const char *func, int line,
103+
const char *err, int should_abort)
101104
{
102105
if (lo > val || hi < val) {
103106
char buf[128];
104107
p_snprintf(buf, sizeof(buf), "%d not in [%d,%d]", val, lo, hi);
105-
clar__fail(file, line, err, buf, should_abort);
108+
clar__fail(file, func, line, err, buf, should_abort);
106109
}
107110
}
108111

109112
#define cl_assert_equal_sz(sz1,sz2) do { \
110113
size_t __sz1 = (size_t)(sz1), __sz2 = (size_t)(sz2); \
111-
clar__assert_equal(__FILE__,__LINE__,#sz1 " != " #sz2, 1, "%"PRIuZ, __sz1, __sz2); \
114+
clar__assert_equal(__FILE__,__func__,__LINE__,#sz1 " != " #sz2, 1, "%"PRIuZ, __sz1, __sz2); \
112115
} while (0)
113116

114117
#define cl_assert_in_range(L,V,H) \
115-
clar__assert_in_range((L),(V),(H),__FILE__,__LINE__,"Range check: " #V " in [" #L "," #H "]", 1)
118+
clar__assert_in_range((L),(V),(H),__FILE__,__func__,__LINE__,"Range check: " #V " in [" #L "," #H "]", 1)
116119

117120
#define cl_assert_equal_file(DATA,SIZE,PATH) \
118-
clar__assert_equal_file(DATA,SIZE,0,PATH,__FILE__,(int)__LINE__)
121+
clar__assert_equal_file(DATA,SIZE,0,PATH,__FILE__,__func__,(int)__LINE__)
119122

120123
#define cl_assert_equal_file_ignore_cr(DATA,SIZE,PATH) \
121-
clar__assert_equal_file(DATA,SIZE,1,PATH,__FILE__,(int)__LINE__)
124+
clar__assert_equal_file(DATA,SIZE,1,PATH,__FILE__,__func__,(int)__LINE__)
122125

123126
void clar__assert_equal_file(
124127
const char *expected_data,
125128
size_t expected_size,
126129
int ignore_cr,
127130
const char *path,
128131
const char *file,
132+
const char *func,
129133
int line);
130134

131135
GIT_INLINE(void) clar__assert_equal_oid(
132-
const char *file, int line, const char *desc,
136+
const char *file, const char *func, int line, const char *desc,
133137
const git_oid *one, const git_oid *two)
134138
{
135139
if (git_oid_cmp(one, two)) {
@@ -138,12 +142,12 @@ GIT_INLINE(void) clar__assert_equal_oid(
138142
git_oid_fmt(&err[1], one);
139143
git_oid_fmt(&err[47], two);
140144

141-
clar__fail(file, line, desc, err, 1);
145+
clar__fail(file, func, line, desc, err, 1);
142146
}
143147
}
144148

145149
#define cl_assert_equal_oid(one, two) \
146-
clar__assert_equal_oid(__FILE__, __LINE__, \
150+
clar__assert_equal_oid(__FILE__, __func__, __LINE__, \
147151
"OID mismatch: " #one " != " #two, (one), (two))
148152

149153
/*

tests/core/mkdir.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -150,10 +150,11 @@ static void cleanup_chmod_root(void *ref)
150150
git_futils_rmdir_r("r", NULL, GIT_RMDIR_EMPTY_HIERARCHY);
151151
}
152152

153-
#define check_mode(X,A) check_mode_at_line((X), (A), __FILE__, __LINE__)
153+
#define check_mode(X,A) check_mode_at_line((X), (A), __FILE__, __func__, __LINE__)
154154

155155
static void check_mode_at_line(
156-
mode_t expected, mode_t actual, const char *file, int line)
156+
mode_t expected, mode_t actual,
157+
const char *file, const char *func, int line)
157158
{
158159
/* FAT filesystems don't support exec bit, nor group/world bits */
159160
if (!cl_is_chmod_supported()) {
@@ -162,7 +163,7 @@ static void check_mode_at_line(
162163
}
163164

164165
clar__assert_equal(
165-
file, line, "expected_mode != actual_mode", 1,
166+
file, func, line, "expected_mode != actual_mode", 1,
166167
"%07o", (int)expected, (int)(actual & 0777));
167168
}
168169

tests/core/structinit.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ static void options_cmp(void *one, void *two, size_t size, const char *name)
4848

4949
p_snprintf(desc, 1024, "Difference in %s at byte %" PRIuZ ": macro=%u / func=%u",
5050
name, i, ((char *)one)[i], ((char *)two)[i]);
51-
clar__fail(__FILE__, __LINE__,
51+
clar__fail(__FILE__, __func__, __LINE__,
5252
"Difference between macro and function options initializer",
5353
desc, 0);
5454
return;

0 commit comments

Comments
 (0)