[PATCH] D26503: [Parser][ObjC] Improve diagnostics and recovery when C++ keywords are used as identifiers in Objective-C++

Manman Ren via cfe-commits cfe-commits at lists.llvm.org
Tue Nov 15 15:26:51 PST 2016


manmanren added a comment.

Cheers,
Manman



================
Comment at: include/clang/Basic/DiagnosticParseKinds.td:442
+/// Objective-C++ parser diagnostics
+def err_expected_objcxx_keyword : Error<
+  "expected %0; %1 is a keyword in Objective-C++">;
----------------
This name is a little misleading. It sounds like we are expecting a keyword :]


================
Comment at: include/clang/Parse/Parser.h:798
+  ///
+  /// Try to recover from the error by checking if the next token if a C++
+  /// keyword when parsing Objective-C++. Return false if the recovery was
----------------
--> if the next token is a C++ (if to is)


================
Comment at: include/clang/Parse/Parser.h:801
+  /// successful.
+  bool diagnoseExpectedObjCIdentifier();
+
----------------
Same here. The function name is kind of misleading.


================
Comment at: lib/Parse/ParseDecl.cpp:5405
+      // Objective-C++: Detect C++ keywords and try to prevent further errors by
+      // treating these keyword as valid member names.
+      if (getLangOpts().ObjC1 && getLangOpts().CPlusPlus &&
----------------
Does C++ have the same issue? Or is this only needed for Objective-C++?


================
Comment at: lib/Parse/ParseObjc.cpp:153
     MaybeSkipAttributes(tok::objc_class);
-    if (Tok.isNot(tok::identifier)) {
-      Diag(Tok, diag::err_expected) << tok::identifier;
+    if (Tok.isNot(tok::identifier) && diagnoseExpectedObjCIdentifier()) {
       SkipUntil(tok::semi);
----------------
Are we doing this for all occurrences of "isNot(token::identifier)"?
Is it better to wrap this "&&" in the function and rename the function to something like diagnoseNonIdentifier?


Repository:
  rL LLVM

https://reviews.llvm.org/D26503





More information about the cfe-commits mailing list