[PATCH] D47503: Sema: Add a warning for member pointers with incomplete base types.

Peter Collingbourne via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue May 29 17:58:09 PDT 2018


pcc added inline comments.


================
Comment at: clang/lib/Sema/SemaType.cpp:2451-2455
+  // FIXME: This will cause errors if template instantiation fails.
+  if (!Context.getDiagnostics().isIgnored(diag::warn_memptr_incomplete, Loc) &&
+      !Class->isDependentType() &&
+      !Class->getAsCXXRecordDecl()->isBeingDefined())
+    RequireCompleteType(Loc, Class, diag::warn_memptr_incomplete);
----------------
rsmith wrote:
> This doesn't seem right. Calling `RequireCompleteType` will trigger instantiation of the type if it's templated, which can affect the validity (and rarely, the meaning) of the program. Also, passing a warning diagnostic into `RequireCompleteType` doesn't actually work -- there are cases where it will disregard your diagnostic and substitute one of its own, which will be an error.
You're right, but I couldn't see a way of testing whether a type is complete without triggering those side effects. It does look like we can at least avoid some of them with `isCompleteType`, though. I guess the best we can do is to move the diagnostic into `RequireCompleteTypeImpl` and make it conditional on `isCompleteType` as @rnk suggested.


https://reviews.llvm.org/D47503





More information about the cfe-commits mailing list