[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