Skip to content

Commit d660dce

Browse files
committed
Enhance build configuration and improve macro definitions
- Updated Makefile to include CMAKE_EXPORT_COMPILE_COMMANDS and CXX_FLAGS for better build support. - Modified benchmark, fuzz test, and unit test macros to suppress warnings and improve usability. - Adjusted Printer class to handle enum printing with magic_enum when enabled. - Refined IRObject structure for better memory handling and added checks in serialization functions. - Updated test cases for improved accuracy and consistency in logging and assertions.
1 parent 6982156 commit d660dce

18 files changed

Lines changed: 415 additions & 43 deletions

.clangd

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
CompileFlags:
2+
CompilationDatabase: ./build/linux

Makefile

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@ build/linux/Makefile: Makefile
66
mkdir -p build/linux
77
cmake -B build/linux -S . -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_STANDARD=11 \
88
-DBUILD_EXAMPLES=ON -DBUILD_TEST=ON -DUSE_MOLD=ON -DDISABLE_CUDA_BUILD=OFF -DENABLE_FUZZING=ON \
9-
-DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang
9+
-DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang \
10+
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
11+
-DCMAKE_CXX_FLAGS=-L/home/utils/llvm-20.1.8/lib/clang/20/lib/linux
1012

1113
linux: build/linux/Makefile
1214
cmake --build build/linux -j `nproc`

include/zeroerr/benchmark.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,10 @@ ZEROERR_SUPPRESS_COMMON_WARNINGS_PUSH
2020
{name, __FILE__, __LINE__, function, {__VA_ARGS__}}, zeroerr::TestType::bench); \
2121
static void function(ZEROERR_UNUSED(zeroerr::TestContext* _ZEROERR_TEST_CONTEXT))
2222

23-
#define BENCHMARK(name, ...) \
24-
ZEROERR_CREATE_BENCHMARK_FUNC(ZEROERR_NAMEGEN(_zeroerr_benchmark), name, __VA_ARGS__)
23+
#define BENCHMARK(...) \
24+
ZEROERR_SUPPRESS_VARIADIC_MACRO \
25+
ZEROERR_CREATE_BENCHMARK_FUNC(ZEROERR_NAMEGEN(_zeroerr_benchmark), __VA_ARGS__) \
26+
ZEROERR_SUPPRESS_VARIADIC_MACRO_POP \
2527

2628

2729
namespace zeroerr {

include/zeroerr/domains/arbitrary.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ class Arbitrary<T, 2, is_unsigned_int<T>> : public DomainConvertable<T> {
7070

7171
CorpusType GetRandomCorpus(Rng& rng) const override { return static_cast<T>(rng.bounded(100)); }
7272

73-
void Mutate(Rng& rng, CorpusType& v, bool only_shrink) const override {
73+
void Mutate(Rng& rng, CorpusType& v, bool) const override {
7474
v = static_cast<T>(rng.bounded(100));
7575
}
7676
};
@@ -88,7 +88,7 @@ class Arbitrary<T, 2, is_signed_int<T>> : public DomainConvertable<T> {
8888

8989
CorpusType GetRandomCorpus(Rng& rng) const override { return static_cast<T>(rng.bounded(100)); }
9090

91-
void Mutate(Rng& rng, CorpusType& v, bool only_shrink) const override {
91+
void Mutate(Rng& rng, CorpusType& v, bool) const override {
9292
v = static_cast<T>(rng.bounded(100));
9393
v -= 50;
9494
}
@@ -106,7 +106,7 @@ class Arbitrary<T, 2, is_float_point<T>> : public DomainConvertable<T> {
106106
return static_cast<T>(rng.bounded(1000));
107107
}
108108

109-
void Mutate(Rng& rng, CorpusType& v, bool only_shrink) const override {
109+
void Mutate(Rng& rng, CorpusType& v, bool) const override {
110110
v = static_cast<T>(rng.bounded(1000));
111111
}
112112
};

include/zeroerr/domains/in_range.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class InRange : public DomainConvertable<T> {
4141
return v;
4242
}
4343

44-
void Mutate(Rng& rng, CorpusType& v, bool only_shrink) const override {
44+
void Mutate(Rng& rng, CorpusType& v, bool) const override {
4545
CorpusType offsize = max - min + 1;
4646
v = rng.bounded(offsize);
4747
v = min + v;

include/zeroerr/fuzztest.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,10 @@ ZEROERR_SUPPRESS_COMMON_WARNINGS_PUSH
2626
{name, __FILE__, __LINE__, function, {__VA_ARGS__}}, zeroerr::TestType::fuzz_test); \
2727
static void function(ZEROERR_UNUSED(zeroerr::TestContext* _ZEROERR_TEST_CONTEXT))
2828

29-
#define FUZZ_TEST_CASE(name, ...) \
30-
ZEROERR_CREATE_FUZZ_TEST_FUNC(ZEROERR_NAMEGEN(_zeroerr_testcase), name, __VA_ARGS__)
29+
#define FUZZ_TEST_CASE(...) \
30+
ZEROERR_SUPPRESS_COMMON_WARNINGS_PUSH \
31+
ZEROERR_CREATE_FUZZ_TEST_FUNC(ZEROERR_NAMEGEN(_zeroerr_testcase), __VA_ARGS__) \
32+
ZEROERR_SUPPRESS_COMMON_WARNINGS_POP
3133

3234
#define FUZZ_FUNC(func) zeroerr::FuzzFunction(func, _ZEROERR_TEST_CONTEXT)
3335

include/zeroerr/internal/config.h

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@
8383
#define ZEROERR_TRIGGER_PARENTHESIS_(...) ,
8484

8585
#define ZEROERR_ISEMPTY(...) \
86+
ZEROERR_SUPPRESS_VARIADIC_MACRO \
8687
_ZEROERR_ISEMPTY(/* test if there is just one argument, eventually an empty \
8788
one */ \
8889
ZEROERR_HAS_COMMA(__VA_ARGS__), /* test if ZEROERR_TRIGGER_PARENTHESIS_ \
@@ -93,7 +94,8 @@
9394
ZEROERR_HAS_COMMA(__VA_ARGS__( \
9495
/*empty*/)), /* test if placing it between ZEROERR_TRIGGER_PARENTHESIS_ \
9596
and the parenthesis adds a comma */ \
96-
ZEROERR_HAS_COMMA(ZEROERR_TRIGGER_PARENTHESIS_ __VA_ARGS__(/*empty*/)))
97+
ZEROERR_HAS_COMMA(ZEROERR_TRIGGER_PARENTHESIS_ __VA_ARGS__(/*empty*/))) \
98+
ZEROERR_SUPPRESS_VARIADIC_MACRO_POP
9799

98100
#define ZEROERR_PASTE5(_0, _1, _2, _3, _4) _0##_1##_2##_3##_4
99101
#define _ZEROERR_ISEMPTY(_0, _1, _2, _3) \
@@ -227,6 +229,7 @@
227229
ZEROERR_CLANG_SUPPRESS_WARNING("-Wmissing-prototypes") \
228230
ZEROERR_CLANG_SUPPRESS_WARNING("-Wc++98-compat") \
229231
ZEROERR_CLANG_SUPPRESS_WARNING("-Wc++98-compat-pedantic") \
232+
ZEROERR_CLANG_SUPPRESS_WARNING("-Wvariadic-macro-arguments-omitted") \
230233
\
231234
ZEROERR_GCC_SUPPRESS_WARNING_PUSH \
232235
ZEROERR_GCC_SUPPRESS_WARNING("-Wunknown-pragmas") \
@@ -295,8 +298,9 @@
295298

296299
#define ZEROERR_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_END ZEROERR_MSVC_SUPPRESS_WARNING_POP
297300

298-
#define ZEROERR_SUPPRESS_VARIADIC_MACRO \
299-
ZEROERR_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wgnu-zero-variadic-macro-arguments")
301+
#define ZEROERR_SUPPRESS_VARIADIC_MACRO \
302+
ZEROERR_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wgnu-zero-variadic-macro-arguments") \
303+
ZEROERR_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wvariadic-macro-arguments-omitted")
300304

301305
#define ZEROERR_SUPPRESS_VARIADIC_MACRO_POP ZEROERR_CLANG_SUPPRESS_WARNING_POP
302306

include/zeroerr/internal/serialization.h

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ namespace zeroerr {
4141
*/
4242

4343
struct IRObject {
44-
IRObject() { std::memset(this, 0, sizeof(IRObject)); }
44+
IRObject() { memset(this, 0, sizeof(IRObject)); }
4545
~IRObject() {}
4646
IRObject(const IRObject& other) { *this = other; }
4747
IRObject(IRObject&& other) { *this = std::move(other); }
@@ -55,7 +55,7 @@ struct IRObject {
5555
return *this;
5656
}
5757

58-
enum Type { Undefined, Int, Float, String, ShortString, Object };
58+
enum Type { Undefined = 0, Int, Float, String, ShortString, Object };
5959

6060
union {
6161
int64_t i;
@@ -65,7 +65,7 @@ struct IRObject {
6565
IRObject* o; // first must be the number of elements
6666
};
6767
char others[7];
68-
unsigned type;
68+
unsigned char type;
6969

7070
template <typename T>
7171
typename std::enable_if<std::is_integral<T>::value, T>::type GetScalar() {
@@ -128,7 +128,10 @@ struct IRObject {
128128
int64_t size;
129129
IRObject* children;
130130
};
131-
Childrens GetChildren() { return {o->i, o + 1}; }
131+
Childrens GetChildren() {
132+
if (type != Type::Object) return {0, nullptr};
133+
return {o->i, o + 1};
134+
}
132135

133136
void SetChildren(IRObject* children) {
134137
o = children - 1;

include/zeroerr/internal/typetraits.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -262,9 +262,10 @@ void visit2_at(std::tuple<Ts...>& tup1, const std::tuple<T2s...>& tup2, size_t i
262262
typename std::enable_if<x, void>::type
263263
#define ZEROERR_IS_INT std::is_integral<T>::value
264264
#define ZEROERR_IS_FLOAT std::is_floating_point<T>::value
265+
#define ZEROERR_IS_ENUM std::is_enum<T>::value
265266
#define ZEROERR_IS_CONTAINER detail::is_container<T>::value
266267
#define ZEROERR_IS_STRING detail::is_string<T>::value
267-
#define ZEROERR_IS_POINTER std::is_pointer<T>::value
268+
#define ZEROERR_IS_POINTER (std::is_pointer<T>::value || std::is_same<T, std::nullptr_t>::value)
268269
#define ZEROERR_IS_CHAR std::is_same<T, char>::value
269270
#define ZEROERR_IS_WCHAR std::is_same<T, wchar_t>::value
270271
#define ZEROERR_IS_CLASS std::is_class<T>::value

include/zeroerr/print.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,13 @@ struct Printer {
114114
return demangle(typeid(t).name());
115115
}
116116

117+
#if defined(ZEROERR_ENABLE_MAGIC_ENUM) && (ZEROERR_CXX_STANDARD >= 17)
118+
ZEROERR_ENABLE_IF(ZEROERR_IS_ENUM)
119+
print(T value, unsigned level, const char* lb, rank<0>) { os << tab(level) << magic_enum::enum_name(value) << lb; }
120+
#else
121+
ZEROERR_ENABLE_IF(ZEROERR_IS_ENUM)
122+
print(T value, unsigned level, const char* lb, rank<0>) { os << tab(level) << value << lb; }
123+
#endif
117124

118125
ZEROERR_ENABLE_IF(ZEROERR_IS_INT || ZEROERR_IS_FLOAT)
119126
print(T value, unsigned level, const char* lb, rank<0>) { os << tab(level) << value << lb; }
@@ -123,7 +130,7 @@ struct Printer {
123130
if (value == nullptr)
124131
os << tab(level) << "nullptr" << lb;
125132
else
126-
os << tab(level) << "<" << type(value) << " at " << value << ">" << lb;
133+
os << tab(level) << "<" << type(value) << " at " << static_cast<const void*>(value) << ">" << lb;
127134
}
128135

129136

0 commit comments

Comments
 (0)