rsmith added a comment.

In D93095#2663639 <https://reviews.llvm.org/D93095#2663639>, @serge-sans-paille 
wrote:

> Warn on friend functions. I failed to support friend classes, but they are 
> only declared and not defined, so that should be fine, right?

They can still conflict, so I think we should warn. For example:

  // user code
  struct A { friend struct _b; };
  // system header
  enum _b {}; // error



================
Comment at: clang/include/clang/AST/Decl.h:81-82
 
+inline const StreamingDiagnostic &operator<<(const StreamingDiagnostic &DB,
+                                             ReservedIdentifierStatus Status) {
+  return DB << static_cast<int>(Status);
----------------
This should be declared with the definition of `ReservedIdentifierStatus` -- or 
simply removed. We usually include the cast at the diagnostic emission site, 
which I find makes it locally clear that we're making an assumption about the 
numerical values of the enumerators.


================
Comment at: clang/include/clang/Basic/DiagnosticGroups.td:798
+
+def ReservedIdAsSymbol : DiagGroup<"reserved-extern-identifier">;
+def ReservedIdentifier : DiagGroup<"reserved-identifier",
----------------
Some of the uses of this warning are for non-external identifiers.  It'd also 
be nice for the diagnostics in this area to have consistent names. Currently we 
have: `-Wreserved-id-macro`, `-Wreserved-extern-identifier`, 
`-Wreserved-identifier`. I'd like to see either consistent use of "identifier" 
or consistent use of "id' (preferably "identifier") and consistent word order.


================
Comment at: clang/lib/CodeGen/CGDebugInfo.cpp:4051-4052
   if (const auto *Id = CalleeDecl->getIdentifier())
-    if (Id->isReservedName())
+    if (Id->isReserved(CGM.getLangOpts()) !=
+        ReservedIdentifierStatus::NotReserved)
       return;
----------------
aaron.ballman wrote:
> There's a slight functionality change here in that the code used to allow 
> identifiers that start with a single underscore followed by a lowercase 
> letter and that now early returns. Is that expected (and tested)?
Should we instead be asking whether `CalleeDecl` has a reserved name, now that 
we can?


================
Comment at: clang/lib/Sema/SemaCodeComplete.cpp:746
 
+  ReservedIdentifierStatus Status = Id->isReserved(SemaRef.getLangOpts());
   // Ignore reserved names for compiler provided decls.
----------------
Should we be using `ND->isReserved` here?


================
Comment at: clang/lib/Sema/SemaDecl.cpp:5564-5565
+  ReservedIdentifierStatus Status = D->isReserved(getLangOpts());
+  if (Status != ReservedIdentifierStatus::NotReserved)
+    if (Context.getSourceManager().isInMainFile(D->getLocation()))
+      Diag(D->getLocation(), diag::warn_reserved_extern_symbol) << D << Status;
----------------
aaron.ballman wrote:
> 
I'm surprised we don't warn in user headers. Is that intentional?


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D93095/new/

https://reviews.llvm.org/D93095

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

Reply via email to