int a = {1, 2, 3}; is not valid C code.
It is a so-called constraint violation in the C standard, after which a compiler is required to issue a diagnostic message:
C17 6.7.9/2:
Constraints
No initializer shall attempt to provide a value for an object not contained within the entity being initialized.
It's not a syntax error though, we may actually write weird crap such as int a = {1}; with a single, brace-enclosed initializer. The result no matter the error reason is the same though - compilers must issue diagnostic messages for all constraint- and syntax violations.
To avoid wasting your time at trouble-shooting invalid C code such as this, study What compiler options are recommended for beginners learning C?
As for what compilers like gcc and clang do when faced with such non-standard code - they appear to simply discard the superfluous initializers. If I compile this code with gcc/clang for x86 and ignore the diagnostic message:
int foo (void)
{
int a = {1, 2, 3};
return a;
}
The resulting x86 assembly is
mov eax, 1
ret
Which when translated back to C is 100% equivalent to
int foo (void)
{
return 1;
}
It's important to understand that this is a non-standard compiler extension though, and no guaranteed or portable behavior.