Pourquoi le compilateur ne signale-t-il pas un point-virgule manquant?

J'ai ce programme simple: #include <stdio.h> struct S { int i; }; void swap(struct S *a, struct S *b) { struct S temp; temp = *a /* Oops, missing a semicolon here... */ *a = *b; *b = temp; } int main(void) { struct S a = { 1 }; struct S b = { 2 }; swap(&a, &b); } Comme vu par exemple...