[cfe-commits] r91767 - in /cfe/trunk: lib/Sema/ test/CXX/class/class.local/ test/CXX/dcl.decl/dcl.meaning/dcl.mptr/ test/CXX/over/over.over/ test/Sema/ test/SemaCXX/ test/SemaObjCXX/ test/SemaTemplate/
Douglas Gregor
dgregor at apple.com
Mon Dec 21 08:20:32 PST 2009
On Dec 20, 2009, at 2:18 PM, Eli Friedman wrote:
> On Sun, Dec 20, 2009 at 1:07 PM, Douglas Gregor <dgregor at apple.com> wrote:
>>
>> On Dec 19, 2009, at 12:11 AM, Eli Friedman wrote:
>>
>> Author: efriedma
>> Date: Sat Dec 19 02:11:05 2009
>> New Revision: 91767
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=91767&view=rev
>> Log:
>> Initialization improvements: addition of string initialization and a few
>> small bug fixes in SemaInit, switch over SemaDecl to use it more often, and
>> change a bunch of diagnostics which are different with the new
>> initialization
>> code.
>>
>> Cool, thanks! Comments below...
>>
>> @@ -2492,7 +2500,8 @@
>> const InitializationKind &Kind,
>> Expr *Initializer,
>> InitializationSequence &Sequence) {
>> - // FIXME: Implement!
>> + Sequence.setSequenceKind(InitializationSequence::StringInit);
>> + Sequence.AddStringInitStep(Entity.getType().getType());
>> }
>>
>> We'll need to perform more of the checking from CheckStringInit here, to
>> determine whether it is valid to initialize the entity with the given string
>> literal. That will become important when overload resolution switches over
>> to using InitializationSequences, because we determine the validity of the
>> initialization in the "Try*" function and then actually perform the
>> initialization in "Perform".
>
> Umm, I'm not sure what exactly you want me to do here:
>
> 1. CheckStringInit doesn't do anything relevant; all the interesting
> logic is in IsStringInit, which we already call.
> 2. It's impossible to end up in TryStringLiteralInitialization in
> overload resolution because a function can't take an array as a
> argument.
You're right, of course. Sorry for the noise :(
>> /// \brief Attempt initialization by constructor (C++ [dcl.init]), which
>> @@ -2711,10 +2720,17 @@
>> }
>> }
>> }
>> -
>> +
>> + SourceLocation DeclLoc = Initializer->getLocStart();
>> +
>> if (const RecordType *SourceRecordType = SourceType->getAs<RecordType>())
>> {
>> // The type we're converting from is a class type, enumerate its
>> conversion
>> // functions.
>> +
>> + // Try to force the type to be complete before enumerating the
>> conversion
>> + // functions; it's okay if this fails, though.
>> + S.RequireCompleteType(DeclLoc, SourceType, 0);
>>
>> This would be better as
>> if (!S.RequireCompleteType(DeclLoc, SourceType, 0)) {
>> // enumerate conversion functions
>> }
>
> Done in r91797.
Thanks!
- Doug
More information about the cfe-commits
mailing list