bkramer marked 2 inline comments as done.
bkramer added a comment.

In https://reviews.llvm.org/D23130#589643, @alexfh wrote:

> > and generally frowned upon in many codebases (e.g. LLVM)
>
> Should it still be a part of google/? The old check was enforcing a part of 
> the Google C++ style guide, but the new one seems to be somewhat broader. Am 
> I mistaken?


The google style guide has a rule that code should usually be placed in a 
namespace. The wording there is fuzzy, but I believe this check still belongs 
under google/



================
Comment at: clang-tidy/google/GlobalNamesCheck.cpp:77
+    }
+    diag(
+        D->getLocStart(),
----------------
aaron.ballman wrote:
> Is this formatting that clang-format generates?
Yes. I clang-formatted the entire file.


================
Comment at: test/clang-tidy/google-global-names.cpp:13-14
+// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: 'i' declared in the global 
namespace
+extern int ii = 0;
+// CHECK-MESSAGES: :[[@LINE-1]]:12: warning: 'ii' declared in the global 
namespace
+
----------------
aaron.ballman wrote:
> aaron.ballman wrote:
> > bkramer wrote:
> > > aaron.ballman wrote:
> > > > This strikes me as being intentional enough to warrant not diagnosing 
> > > > because of the `extern` keyword.
> > > The only case I see where this pattern is valuable is interfacing with C 
> > > code. Not sure yet if we want to allow that or enforce extern "C" 
> > > instead. Ideas?
> > > 
> > > an extern global in the global namespace still feels like something we 
> > > should warn on :|
> > Yet externs in the global namespace do happen for valid reasons (such as 
> > not breaking ABIs by putting the extern definition into a namespace or 
> > changing the language linkage) -- I'm trying to think of ways we can allow 
> > the user to silence this diagnostic in those cases. I feel like in cases 
> > where the user writes "extern", they're explicitly specifying their intent 
> > and that doesn't seem like a case to warn them about, in some regards. It 
> > would give us two ways to silence the diagnostic (well, three, but two are 
> > morally close enough):
> > 
> > 1) Put it into a namespace
> > 2) Slap `extern` on it if it is global for C++ compatibility (such as ABIs)
> > 3) Slap `extern "C"` on it if it global for C compatibility
> > 
> > I suppose we could require `extern "C++"` instead of `extern`, but I don't 
> > think that's a particularly common use of the language linkage specifier?
> I still think that a user explicitly writing 'extern' is expecting external 
> linkage and all that goes along with it.
I disagree. If this is a special variable to be accessed via dlopen it should 
be extern "C". If not it should be in a namespace.


================
Comment at: test/clang-tidy/google-global-names.cpp:18
+extern "C" void g();
+extern "C" void h() {}
+
----------------
aaron.ballman wrote:
> Can you also add a test:
> ```
> extern "C++" void h2() {}
> ```
> I believe this will diagnose, but whether it should diagnose or not, I'm less 
> certain of.
Test added, doesn't diagnose.


https://reviews.llvm.org/D23130



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to