[PATCH] D68772: [COFF] Wrap things in namespace lld { namespace coff {
Fangrui Song via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Oct 16 21:04:33 PDT 2019
MaskRay marked an inline comment as done.
MaskRay added subscribers: aganea, inglorion, zturner, pcc.
MaskRay added inline comments.
================
Comment at: lld/COFF/DebugTypes.cpp:213-214
// moved here.
-Expected<llvm::pdb::NativeSession *>
-lld::coff::findTypeServerSource(const ObjFile *f) {
Expected<TypeServerSource *> ts = TypeServerSource::findFromFile(f);
----------------
rnk wrote:
> MaskRay wrote:
> > rnk wrote:
> > > I prefer this style for free functions because it makes it a hard error if there's a mismatch between the header and the cpp file. It's a pretty simple style rule: every function implemented in a .cpp file should either be qualified with a class or namespace name, or it should be marked static. Then you never have to worry about what the active namespace is outside of headers.
> > >
> > > That's just my personal preference and it's not in CodingStandards, but given how much we use free functions in LLD and LLVM, it's kind of nice.
> > Does the argument mean this patch should be reverted?
> >
> > If we have interleaved classes and free functions, we may have:
> >
> > ```
> > namespace lld {
> > namespace coff {
> > void Class::method0() {}
> > }
> > }
> >
> > void lld::coff::free0() {} // we have to leave the active namespace, because otherwise [-Wextra-qualification]
> >
> > namespace lld {
> > namespace coff {
> > void Class::method1() {}
> > }
> > }
> >
> > void lld::coff::free1() {}
> > ```
> >
> > Instead of doing that, this patch uses an outer most `namespace lld { namespace coff {` so we will not need to think much about the active namespace.
> > Does the argument mean this patch should be reverted?
>
> Maybe. I'm saying I would prefer to go the opposite direction from this patch, and standardize on the `lld::coff::foo` names. But, this is just my opinion, not a standard, and I want to see if people agree first.
>
> > If we have interleaved classes and free functions, we may have:
> > ...
>
> The code pattern we had before this change looked like:
> ```
> // Foo.h
> namespace lld { namespace coff {
> class Foo { void bar(); };
> void baz();
> } } // lld::coff
>
> // Foo.cpp
> using namespace lld;
> using namespace lld::coff;
> void Foo::bar() {
> ...
> }
> void lld::coff::baz() {
> ...
> }
> ```
> We never needed to open and close the namespaces in the first place, because classes like Foo are already in scope. In general, when do we have to open namespace in a .cpp file? I don't think there are any cases that really matter.
>
> I guess another thing that makes me lean this way is the LLVM preference for as few scopes as possible:
> - use early return/break/continue
> - prefer static to anon namespace
>
> This style seems like it fits into that:
> - have as few open namespace scopes as possible
To gather feedback: @aganea @inglorion @pcc @zturner
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D68772/new/
https://reviews.llvm.org/D68772
More information about the llvm-commits
mailing list