[PATCH] D16846: PR26449: Fixes for bugs in __builtin_classify_type implementation
John McCall via cfe-commits
cfe-commits at lists.llvm.org
Thu Feb 4 10:38:39 PST 2016
rjmccall added a comment.
Thank you, that's a lot better. Just a few suggestions to promote exhaustive checking.
================
Comment at: lib/AST/ExprConstant.cpp:6246
@@ +6245,3 @@
+
+ default:
+ break;
----------------
Again, try to avoid adding default cases. There's an x-macro file for BuiltinTypes, too.
================
Comment at: lib/AST/ExprConstant.cpp:6262
@@ +6261,3 @@
+ else if (CanTy->isMemberFunctionPointerType())
+ return method_type_class;
+ break;
----------------
Please turn the else-if into an else with an assert.
================
Comment at: lib/AST/ExprConstant.cpp:6277
@@ +6276,3 @@
+ return union_type_class;
+ break;
+
----------------
You can switch over the tag kind here.
================
Comment at: lib/AST/ExprConstant.cpp:6285
@@ +6284,3 @@
+
+ default:
+ break;
----------------
Instead of having a default case, you should use an x-macro to exhaustively fill in all the cases that you're assuming can't happen. That way, if somebody adds a new canonical type kind, they'll automatically get a warning here if they don't add it.
In this case, since you're working with a canonical type and it can't be dependent, this would look like:
#define TYPE(ID, BASE)
#define NON_CANONICAL_TYPE(ID, BASE) case Type::ID:
#define NON_CANONICAL_UNLESS_DEPENDENT_TYPE(ID, BASE) case Type::ID:
#define DEPENDENT_TYPE(ID, BASE) case Type::ID:
#include "clang/AST/TypeNodes.def"
http://reviews.llvm.org/D16846
More information about the cfe-commits
mailing list