>>4
This. A lot of information is lost and while decompiled code can be semantically correct (depending on assembly output, original compiler and the decompiler's implementation), it may not be aestheticly pleasing if the compiler was too abusive with the original code or the decompiler does not have a good understanding of the way the compiler works (as well as various ways of translating the listing back into a tree and matching various patterns the compiler used, as well as doing various data and code flow analyses).
In practice decompilation produces best results when done on code with enough information being preserved in the bytecode, such as VM languages like Java or C#. For x86 or other 'real' architectures, it tends to be possible to decompile C code to some intermediate quality if one provides enough data about types and structures used, otherwise the output may be quite ugly, in general, the more detail you can infer, the better the quality of the decompiled output. Humans are still the best decompilers and I expect this to remain true at least until we solve that AGI problem.