[PATCH] D47503: Sema: Add a warning for member pointers with incomplete base types.
Richard Smith - zygoloid via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue May 29 16:31:56 PDT 2018
rsmith added a comment.
In https://reviews.llvm.org/D47503#1115505, @rnk wrote:
> [...] And rewrite the side-effecting isCompleteType call to use RequireCompleteType with the warning diagnostic.
We should keep the `isCompleteType` call and diagnose `if (!isCompleteType(...))`. `RequireCompleteType` needs an error diagnostic. (In particular, `RequireCompleteType` will produce an error suggesting a module import if a module containing the definition is known but not imported; `isCompleteType` will just treat the type as incomplete in that case. Don't `RequireCompleteType` unless you require a complete type :) )
================
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);
----------------
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.
https://reviews.llvm.org/D47503
More information about the cfe-commits
mailing list