Messages in this thread | | | Date | Tue, 2 Nov 2004 22:48:39 +0100 (CET) | From | Jesper Juhl <> | Subject | Re: question on common error-handling idiom |
| |
On Tue, 2 Nov 2004, Jan Engelhardt wrote:
> >There are some places that do > > > >err = -SOMEERROR; > >if (some_error) > > goto out; > >if (some_other_error) > > goto out; > >if (another_error) > > goto out; > > > >Let's see what other people think :) > > err = -ESOME; > if(some_error || some_other_error || another_error) { > goto out; > } > > Best. > Agreed, but that would potentially make something like the following (from fs/binfmt_elf.c::load_elf_binary) quite unreadable :
if (loc->elf_ex.e_type != ET_EXEC && loc->elf_ex.e_type != ET_DYN) goto out; if (!elf_check_arch(&loc->elf_ex)) goto out; if (!bprm->file->f_op||!bprm->file->f_op->mmap) goto out;
But that's not even the most interresting case, the interresting one is the one that does
err = -ERR; if (foo) goto out;
err = -ERROR; if (bar) goto out;
where there's the potential to save an instruction by moving the err= into the error path. But as Oliver Neukum pointed out gcc may not be smart enough for that to actually generate the best code.
Has anyone taken a look at what recent gcc's actually do with different variations of the constructs mentioned in this thread?
-- Jesper Juhl
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |