aaron.ballman added a comment.

This check is missing a whole lot of reserved identifiers. For instance, in C++ 
it is missing everything from http://eel.is/c++draft/zombie.names and for C it 
is missing everything from future library directions. Are you intending to 
cover those cases as well?



================
Comment at: clang-tools-extra/clang-tidy/bugprone/BugproneTidyModule.cpp:124
+    CheckFactories.registerCheck<ReservedIdentifierCheck>(
+        "bugprone-reserved-identifier");
     CheckFactories.registerCheck<SizeofContainerCheck>(
----------------
I think the CERT module should also be given an alias for this check, as it 
seems to cover: 
https://wiki.sei.cmu.edu/confluence/display/c/DCL37-C.+Do+not+declare+or+define+a+reserved+identifier
 and 
https://wiki.sei.cmu.edu/confluence/display/cplusplus/DCL51-CPP.+Do+not+declare+or+define+a+reserved+identifier


================
Comment at: clang-tools-extra/clang-tidy/bugprone/ReservedIdentifierCheck.cpp:35
+
+static std::string collapseConsecutive(const StringRef str, const char c) {
+  std::string result;
----------------
Please drop top-level `const` qualifiers for parameters and locals -- that's 
not a style we typically use.


================
Comment at: 
clang-tools-extra/clang-tidy/bugprone/ReservedIdentifierCheck.cpp:48-51
+  if (hasDoubleUnderscore(Name)) {
+    Name.consume_front("__");
+    return collapseConsecutive(Name, '_');
+  }
----------------
Can't this still result in a reserved identifier? e.g.,
```
int ___Foobar; // three underscores
```


================
Comment at: clang-tools-extra/clang-tidy/bugprone/ReservedIdentifierCheck.cpp:92
+  assert(!Name.empty());
+  if (std::find(Whitelist.begin(), Whitelist.end(), Name) != Whitelist.end())
+    return None;
----------------
`if (llvm::any_of(Whitelist, Name)) return None;`


================
Comment at: clang-tools-extra/clang-tidy/bugprone/ReservedIdentifierCheck.cpp:98
+    Optional<FailureInfo> Info;
+    auto appendFailure = [&](StringRef Kind, std::string &&Fixup) {
+      if (!Info) {
----------------
`AppendFailure` per our usual naming conventions.


================
Comment at: 
clang-tools-extra/clang-tidy/bugprone/ReservedIdentifierCheck.cpp:106
+    };
+    auto inProgressFixup = [&] {
+      return Info
----------------
`InProgressFixup`


================
Comment at: 
clang-tools-extra/clang-tidy/bugprone/ReservedIdentifierCheck.cpp:119-120
+
+    if (Info)
+      return Info;
+  } else {
----------------
You can just `return Info` here without the `if` statement -- the effect is the 
same.


================
Comment at: clang-tools-extra/clang-tidy/bugprone/ReservedIdentifierCheck.h:21
+
+/// Checks for usages of identifiers reserved for use by the C++ 
implementation.
+/// The C++ standard reserves the following names for such use:
----------------
Why just C++? C has reserved identifiers as well, and there's a lot of overlap 
between the two languages in terms of what's reserved.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D72378



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

Reply via email to