Compiler optimizations with non initialized values

What the compiler does with the following code?

Obviously we see that we can return an uninitialized value.

#include <cstddef>

size_t f(int x){
    size_t a;
    if(x)
        a = 42;
    return a;
}

The compiler would generate

f(int):
        push    rbp
        mov     rbp, rsp
        mov     DWORD PTR [rbp-20], edi
        cmp     DWORD PTR [rbp-20], 0
        je      .L2
        mov     QWORD PTR [rbp-8], 42
.L2:
        mov     rax, QWORD PTR [rbp-8]
        pop     rbp
        ret

But what happens under -O1?

The following code is generated:

f(int):
        mov     eax, 42
        ret

https://godbolt.org/z/eaPPM471G

Source: https://lwn.net/Articles/510338/