we have, in the past, used Linux kernel style as our guideline on coreboot style.
I'd say, based on Martin's note, that #pragma once is not such a good idea after all. If we decide NOT to use it, however, let's put a note about it in our style guide? This is not the first time this question has come up. On Mon, May 16, 2022 at 12:34 PM Martin Roth <gauml...@tutanota.com> wrote: > > After reading what I've included below, I'm going to have to vote to keep the > guards. > Martin > > May 16, 2022, 10:59 by david.hendri...@gmail.com: > > > On Mon, May 16, 2022 at 8:59 AM ron minnich <rminn...@gmail.com> wrote: > > > >> > >> btw, sometimes this has gone the other direction .. > >> https://github.com/lowRISC/opentitan/pull/5693 > >> > > > > It looks like they did that solely to conform to Google's style guide > > which, dogmatic as it may appear, makes sense since OpenTitan is a > > Google-lead project. > > > The question then is 'why does Google require the use of guards?'. Whatever > you think of google, they're not going to mandate something like this without > a good reason. > > I went searching for where this rule came from, and found this: > > ``` > If you trust our in-house C++ compiler gurus, here's the most salient part of > the whole thread linked above.Matt Austern (4/11/2013): If you talk to the > authors of [most C++] compilers, I think you'll find that most of them > consider "#pragma once" (or the equivalent #import) to be a flaky feature -- > something that works almost all of the time and that can cause seriously > annoying bugs when it doesn't work. > > Chandler Carruth (4/12/2013): As one of the authors of one of those > compilers, I couldn't agree more. > ``` > any interested Googlers can find this here: > https://yaqs.corp.google.com/eng/q/5768278562045952 > > > Further digging: > ``` > To support #pragma once, the compiler tries to identify duplicate encounters > with the same file, but the check gcc actually performs to establish the > identity of the file is weak. Here's someone who made two copies of the same > header with different names, each with a #pragma once, and it screwed up his > build. > > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52566 > > The two headers had the same size, same content, and same timestamps because > he had run "touch *" on them, but they were intended to both be included. > Only one was included, and the other was falsely identified as a re-inclusion > and ignored.One might say he was asking for trouble by running "touch *", but > timestamp collisions are EASY to come by. First of all, they're only 1sec > resolution. You might patch all the relevant files and they'd have matching > timestamps. You might be using a network filesystem that just doesn't bother > with timestamps (common). > ``` > > Now both of these are almost a decade old, so things might have changed quite > a bit since then. > > > Linux kernel threads: > https://lkml.iu.edu/hypermail/linux/kernel/1401.0/02048.html > https://lore.kernel.org/lkml/CAHk-=wi54descexxpmro+q2nag_tup+y5ybhc_9_xglerfp...@mail.gmail.com/ > > ``` > On Sun, Feb 28, 2021 at 11:34 AM Alexey Dobriyan <adobri...@gmail.com> > wrote:>> >> > End result: #pragma is fundamentally less reliable than the> > > traditional #ifdef guard. The #ifdef guard works fine even if you> > re-read > the file for whatever reason, while #pragma relies on some> > kind of magical > behavior.You continue to not even answer this very fundamental > question."#pragma once" doesn't seem to have a _single_ actual real > advantage.Everybody already does the optimization of not even opening - > muchless reading and re-parsing - headers that have the traditional > #ifdefguard.And even if you _don't_ do that optimization, the #ifdef > guardfundmentally semantically guarantyees the right behavior.So the #ifdef > guard is (a) standard (b) simple (c) reliable (d) traditionaland you have yet > to explain a _single_ advantage of "#pragma once".Why add this incredible > churn that has no upside?So no. We're not using #pragma once unless y9ou can > come up with somevery strong argument for itAnd no, having to come up with a name for the #ifdef guard is not astrong argument. It's simply not that complicated. Linus > ``` > > > > _______________________________________________ coreboot mailing list -- coreboot@coreboot.org To unsubscribe send an email to coreboot-le...@coreboot.org