The latter will but an indeterminate value in a. If a is used after this, the result is unpredictable.
What it is actually doing is
int a = a | funct ();
Problem is a doesn't exist yet so this is actually illegal.
Internally, it will get the value of funct, pop it into a register, create a space for a, pop its value into a register, or the two registers and put the value back into a.