diff --git a/src/api.c b/src/api.c
index 947982c..8195ad6 100644
--- a/src/api.c
+++ b/src/api.c
@@ -79,12 +79,12 @@
 		return HF_VCPU_RUN_RESPONSE(HF_VCPU_RUN_WAIT_FOR_INTERRUPT, 0);
 	}
 
-	vm = secondary_vm + vm_idx;
+	vm = &secondary_vm[vm_idx];
 	if (vcpu_idx >= vm->vcpu_count) {
 		return HF_VCPU_RUN_RESPONSE(HF_VCPU_RUN_WAIT_FOR_INTERRUPT, 0);
 	}
 
-	vcpu = vm->vcpus + vcpu_idx;
+	vcpu = &vm->vcpus[vcpu_idx];
 
 	sl_lock(&vcpu->lock);
 	if (vcpu->state != vcpu_state_ready) {
@@ -224,7 +224,7 @@
 		return -1;
 	}
 
-	to = secondary_vm + vm_idx;
+	to = &secondary_vm[vm_idx];
 	sl_lock(&to->lock);
 
 	if (to->rpc.state != rpc_state_idle || !to->rpc.recv) {
diff --git a/src/cpu.c b/src/cpu.c
index cec490e..185d993 100644
--- a/src/cpu.c
+++ b/src/cpu.c
@@ -10,13 +10,13 @@
 #include "hf/vm.h"
 
 /* The stack to be used by the CPUs. */
-alignas(2 * sizeof(size_t)) static char callstacks[STACK_SIZE * MAX_CPUS];
+alignas(2 * sizeof(size_t)) static char callstacks[MAX_CPUS][STACK_SIZE];
 
 /* State of all supported CPUs. The stack of the first one is initialized. */
 struct cpu cpus[MAX_CPUS] = {
 	{
 		.is_on = 1,
-		.stack_bottom = callstacks + STACK_SIZE,
+		.stack_bottom = &callstacks[0][STACK_SIZE],
 	},
 };
 
@@ -26,10 +26,10 @@
 
 	/* Initialize all CPUs. */
 	for (i = 0; i < MAX_CPUS; i++) {
-		struct cpu *c = cpus + i;
+		struct cpu *c = &cpus[i];
 		cpu_init(c);
 		c->id = i; /* TODO: Initialize ID based on fdt. */
-		c->stack_bottom = callstacks + STACK_SIZE * (i + 1);
+		c->stack_bottom = &callstacks[i][STACK_SIZE];
 	}
 }
 
@@ -74,7 +74,7 @@
 	sl_unlock(&c->lock);
 
 	if (!prev) {
-		struct vcpu *vcpu = primary_vm.vcpus + cpu_index(c);
+		struct vcpu *vcpu = &primary_vm.vcpus[cpu_index(c)];
 		arch_regs_init(&vcpu->regs, entry, arg);
 		vcpu_on(vcpu);
 	}
@@ -101,7 +101,7 @@
 
 	for (i = 0; i < MAX_CPUS; i++) {
 		if (cpus[i].id == id) {
-			return cpus + i;
+			return &cpus[i];
 		}
 	}
 
diff --git a/src/dlog.c b/src/dlog.c
index 7f4e935..7128a7b 100644
--- a/src/dlog.c
+++ b/src/dlog.c
@@ -82,7 +82,7 @@
 	static const char *digits_upper = "0123456789ABCDEFX";
 	const char *d = (flags & FLAG_UPPER) ? digits_upper : digits_lower;
 	char buf[51];
-	char *ptr = buf + sizeof(buf) - 1;
+	char *ptr = &buf[sizeof(buf) - 1];
 	char *num;
 	*ptr = '\0';
 	do {
diff --git a/src/fdt.c b/src/fdt.c
index 6383164..599fca4 100644
--- a/src/fdt.c
+++ b/src/fdt.c
@@ -50,7 +50,7 @@
 
 static void fdt_tokenizer_align(struct fdt_tokenizer *t)
 {
-	t->cur = (char *)(((size_t)t->cur + 3) & ~3);
+	t->cur = (char *)(((uintptr_t)t->cur + 3) & ~3);
 }
 
 static bool fdt_tokenizer_uint32(struct fdt_tokenizer *t, uint32_t *res)
diff --git a/src/load.c b/src/load.c
index cd81237..6ed2d1b 100644
--- a/src/load.c
+++ b/src/load.c
@@ -206,7 +206,7 @@
 			continue;
 		}
 
-		if (!vm_init(secondary_vm + count, count + 1, cpu)) {
+		if (!vm_init(&secondary_vm[count], count + 1, cpu)) {
 			dlog("Unable to initialise vm %u\n", count);
 			continue;
 		}
@@ -239,7 +239,7 @@
 		dlog("Loaded VM%u with %u vcpus, entry at 0x%x\n", count, cpu,
 		     pa_addr(*mem_end));
 
-		vm_start_vcpu(secondary_vm + count, 0, secondary_entry, 0);
+		vm_start_vcpu(&secondary_vm[count], 0, secondary_entry, 0);
 	}
 
 	secondary_vm_count = count;
diff --git a/src/main.c b/src/main.c
index e6ba2f1..7326cb0 100644
--- a/src/main.c
+++ b/src/main.c
@@ -128,5 +128,5 @@
 
 	vm_set_current(&primary_vm);
 
-	return primary_vm.vcpus + cpu_index(c);
+	return &primary_vm.vcpus[cpu_index(c)];
 }
diff --git a/src/mm.c b/src/mm.c
index 9c708cf..51331be 100644
--- a/src/mm.c
+++ b/src/mm.c
@@ -162,7 +162,7 @@
 static bool mm_map_level(ptable_addr_t begin, ptable_addr_t end, paddr_t pa,
 			 uint64_t attrs, pte_t *table, int level, int flags)
 {
-	pte_t *pte = table + mm_index(begin, level);
+	pte_t *pte = &table[mm_index(begin, level)];
 	ptable_addr_t level_end = mm_level_end(begin, level);
 	size_t entry_size = mm_entry_size(level);
 	bool commit = flags & MAP_FLAG_COMMIT;
@@ -308,7 +308,7 @@
 	addr = pa_addr(pa);
 
 	for (i = arch_mm_max_level(mode); i > 0; i--) {
-		table = mm_populate_table_pte(table + mm_index(addr, i), i,
+		table = mm_populate_table_pte(&table[mm_index(addr, i)], i,
 					      sync);
 		if (!table) {
 			return false;
diff --git a/src/vm.c b/src/vm.c
index d03aba8..d2beeb0 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -16,7 +16,7 @@
 
 	/* Do basic initialization of vcpus. */
 	for (i = 0; i < vcpu_count; i++) {
-		vcpu_init(vm->vcpus + i, vm);
+		vcpu_init(&vm->vcpus[i], vm);
 	}
 
 	return mm_ptable_init(&vm->ptable, 0);
@@ -25,7 +25,7 @@
 /* TODO: Shall we use index or id here? */
 void vm_start_vcpu(struct vm *vm, size_t index, ipaddr_t entry, size_t arg)
 {
-	struct vcpu *vcpu = vm->vcpus + index;
+	struct vcpu *vcpu = &vm->vcpus[index];
 	if (index < vm->vcpu_count) {
 		arch_regs_init(&vcpu->regs, entry, arg);
 		vcpu_on(vcpu);
