[cfe-commits] r71689 - in /cfe/trunk: include/clang/Basic/DiagnosticSemaKinds.td lib/Sema/Sema.h lib/Sema/SemaTemplate.cpp lib/Sema/SemaTemplateInstantiate.cpp test/SemaTemplate/temp_explicit.cpp test/SemaTemplate/temp_explicit_cxx0x.cpp
Douglas Gregor
dgregor at apple.com
Wed May 13 22:08:58 PDT 2009
On May 13, 2009, at 12:44 PM, Eli Friedman wrote:
> On Wed, May 13, 2009 at 11:28 AM, Douglas Gregor <dgregor at apple.com>
> wrote:
>> --- cfe/trunk/lib/Sema/SemaTemplateInstantiate.cpp (original)
>> +++ cfe/trunk/lib/Sema/SemaTemplateInstantiate.cpp Wed May 13
>> 13:28:20 2009
>> @@ -247,10 +247,26 @@
>> // Build a temporary integer literal to specify the size for
>> // BuildArrayType. Since we have already checked the size as part
>> of
>> // creating the dependent array type in the first place, we know
>> - // there aren't any errors.
>> - // FIXME: Is IntTy big enough? Maybe not, but LongLongTy causes
>> - // problems that I have yet to investigate.
>> - IntegerLiteral ArraySize(T->getSize(), SemaRef.Context.IntTy,
>> Loc);
>> + // there aren't any errors. However, we do need to determine what
>> + // C++ type to give the size expression.
>> + llvm::APInt Size = T->getSize();
>> + QualType Types[] = {
>> + SemaRef.Context.UnsignedCharTy, SemaRef.Context.UnsignedShortTy,
>> + SemaRef.Context.UnsignedIntTy, SemaRef.Context.UnsignedLongTy,
>> + SemaRef.Context.UnsignedLongLongTy,
>> SemaRef.Context.UnsignedInt128Ty
>> + };
>> + const unsigned NumTypes = sizeof(Types) / sizeof(QualType);
>> + QualType SizeType;
>> + for (unsigned I = 0; I != NumTypes; ++I)
>> + if (Size.getBitWidth() ==
>> SemaRef.Context.getIntWidth(Types[I])) {
>> + SizeType = Types[I];
>> + break;
>> + }
>> +
>> + if (SizeType.isNull())
>> + SizeType =
>> SemaRef.Context.getFixedWidthIntType(Size.getBitWidth(), false);
>> +
>> + IntegerLiteral ArraySize(Size, SizeType, Loc);
>> return SemaRef.BuildArrayType(ElementType, T->getSizeModifier(),
>> &ArraySize, T-
>> >getIndexTypeQualifier(),
>> Loc, Entity);
>
> Would there be an issue with just using getFixedWidthIntType
> unconditionally? The type of the integer literal doesn't actually
> matter.
I just didn't want to build FixedWidthIntType nodes when they aren't
necessary. It probably doesn't matter either way.
- Doug
More information about the cfe-commits
mailing list