diff --git a/src/exp.cpp b/src/exp.cpp
index 4c26f202d82db291e362230e52001f1e74f8c8b7..368c348baac9170119cdf5964a4b5352283f9bb5 100644
--- a/src/exp.cpp
+++ b/src/exp.cpp
@@ -17,9 +17,13 @@ int32_t exp_6(int32_t x)
 
 	/* avoid overflow problems for the multiplication */
 	if( (x < FP(1.0)) && (x > FP(-1.0)) ) {
+		// cppcheck-suppress integerOverflowCond
 		x2 = (x  * x ) / INV_SCALE;
+		// cppcheck-suppress integerOverflowCond
 		x3 = (x2 * x ) / INV_SCALE;
+		// cppcheck-suppress integerOverflowCond
 		x4 = (x2 * x2) / INV_SCALE;
+		// cppcheck-suppress integerOverflowCond
 		x5 = (x3 * x2) / INV_SCALE;
 	} else {
 		x2 = x  * (x  / INV_SCALE);
@@ -76,6 +80,7 @@ int32_t exp_6b(int32_t x)
 	else if( ik < -11 )
 		res_i = -65535;
 	else
+		// cppcheck-suppress arrayIndexOutOfBoundsCond
 		res_i = lut[ik+11];
 
 	// calculate exponential for the fractional part
diff --git a/src/initdeinit.cpp b/src/initdeinit.cpp
index 6b9c5d035a7c384bbeb6d64e84442c088e579b91..fd30759ff9b94a528d906bf2e1a79b9908b99e2f 100644
--- a/src/initdeinit.cpp
+++ b/src/initdeinit.cpp
@@ -2,7 +2,9 @@
 extern "C" void __call_constructors() {
 	extern void (*__init_array_start)();
 	extern void (*__init_array_end)();
-	for (void (**p)() = &__init_array_start; p < &__init_array_end; ++p) {
+	for (void (**p)() = &__init_array_start;
+	     reinterpret_cast<unsigned long>(p) < reinterpret_cast<unsigned long>(&__init_array_end);
+	     ++p) {
 		(*p)();
 	}
 }
@@ -10,7 +12,9 @@ extern "C" void __call_constructors() {
 extern "C" void __call_destructors() {
 	extern void (*__fini_array_start)();
 	extern void (*__fini_array_end)();
-	for (void (**p)() = &__fini_array_start; p < &__fini_array_end; ++p) {
+	for (void (**p)() = &__fini_array_start;
+	     reinterpret_cast<unsigned long>(p) < reinterpret_cast<unsigned long>(&__fini_array_end);
+	     ++p) {
 		(*p)();
 	}
 }
diff --git a/src/mailbox.cpp b/src/mailbox.cpp
index 50b9bedc2fa0a20e2a0b73c3f2dd998bff56c92c..f794e43e7e3ed81fb16d072bf05509bcceb00c16 100644
--- a/src/mailbox.cpp
+++ b/src/mailbox.cpp
@@ -47,7 +47,8 @@ uint32_t mailbox_read(uint8_t * dest, uint32_t const offset, uint32_t const size
 }
 
 uint8_t libnux_mailbox_read_u8(uint32_t const offset) {
-	if (&mailbox_base + offset < &mailbox_end) {
+	if (reinterpret_cast<unsigned long>(&mailbox_base + offset) <
+	    reinterpret_cast<unsigned long>(&mailbox_end)) {
 		return *(&mailbox_base + offset);
 	} else {
 		/* TODO set errno ERANGE as soon as implemented */
@@ -56,7 +57,8 @@ uint8_t libnux_mailbox_read_u8(uint32_t const offset) {
 }
 
 void libnux_mailbox_write_u8(uint32_t const offset, uint8_t const byte) {
-	if (&mailbox_base + offset < &mailbox_end) {
+	if (reinterpret_cast<unsigned long>(&mailbox_base + offset) <
+	    reinterpret_cast<unsigned long>(&mailbox_end)) {
 		*(&mailbox_base + offset) = byte;
 	} else {
 		/* TODO set errno ERANGE as soon as implemented */
diff --git a/test/test_measure_time.cpp b/test/test_measure_time.cpp
index cf8f8bb3de28c8a87719dc4d18cf521cca4ffc4f..f080d808e59b8a2194d4030eaaab25ee0cdc65da 100644
--- a/test/test_measure_time.cpp
+++ b/test/test_measure_time.cpp
@@ -45,7 +45,7 @@ void measure_int_multiply_not_optimized_away(char const* msg, times<N>& t)
 {
 	int a = 10;
 	int b = 20;
-	ATTRIB_UNUSED int c;
+	ATTRIB_UNUSED int c{};
 	do_not_optimize_away(a);
 	do_not_optimize_away(b);
 	do_not_optimize_away(c);
diff --git a/test/test_stack_guard.cpp b/test/test_stack_guard.cpp
index bad454943ab653e3bd2acdb2ec35c2502cc9af8a..d1215c76003d8c16f474b6c27f353eff405333fd 100644
--- a/test/test_stack_guard.cpp
+++ b/test/test_stack_guard.cpp
@@ -9,6 +9,7 @@ int start(void)
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Warray-bounds"
 	/* Write out of bounds into array, overwriting stack-guard magic value. */
+	// cppcheck-suppress arrayIndexOutOfBounds
 	a[2] = 5;
 #pragma GCC diagnostic pop