r227115 - Fix assert instantiating string init of static variable

Richard Smith richard at metafoo.co.uk
Mon Jan 26 11:43:37 PST 2015


On Mon, Jan 26, 2015 at 11:04 AM, Ben Langmuir <blangmuir at apple.com> wrote:
> Author: benlangmuir
> Date: Mon Jan 26 13:04:10 2015
> New Revision: 227115
>
> URL: http://llvm.org/viewvc/llvm-project?rev=227115&view=rev
> Log:
> Fix assert instantiating string init of static variable
>
> ... when the variable's type is a typedef of a ConstantArrayType. Just
> look through the typedef (and any other sugar).  We only use the
> constant array type here to get the element count.
>
> Modified:
>     cfe/trunk/lib/Sema/SemaInit.cpp
>     cfe/trunk/test/SemaTemplate/instantiate-static-var.cpp
>
> Modified: cfe/trunk/lib/Sema/SemaInit.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaInit.cpp?rev=227115&r1=227114&r2=227115&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaInit.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaInit.cpp Mon Jan 26 13:04:10 2015
> @@ -149,9 +149,9 @@ static void updateStringLiteralType(Expr
>  static void CheckStringInit(Expr *Str, QualType &DeclT, const ArrayType *AT,
>                              Sema &S) {
>    // Get the length of the string as parsed.
> -  uint64_t StrLength =
> -    cast<ConstantArrayType>(Str->getType())->getSize().getZExtValue();
> -
> +  auto *ConstantArrayTy =
> +      cast<ConstantArrayType>(Str->getType()->getUnqualifiedDesugaredType());

Please use getAsArrayTypeUnsafe() instead of getUnqualifiedDesugaredType() here.

> +  uint64_t StrLength = ConstantArrayTy->getSize().getZExtValue();
>
>    if (const IncompleteArrayType *IAT = dyn_cast<IncompleteArrayType>(AT)) {
>      // C99 6.7.8p14. We have an array of character type with unknown size
>
> Modified: cfe/trunk/test/SemaTemplate/instantiate-static-var.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaTemplate/instantiate-static-var.cpp?rev=227115&r1=227114&r2=227115&view=diff
> ==============================================================================
> --- cfe/trunk/test/SemaTemplate/instantiate-static-var.cpp (original)
> +++ cfe/trunk/test/SemaTemplate/instantiate-static-var.cpp Mon Jan 26 13:04:10 2015
> @@ -114,3 +114,15 @@ namespace PR6449 {
>    template class X1<char>;
>
>  }
> +
> +typedef char MyString[100];
> +template <typename T>
> +struct StaticVarWithTypedefString {
> +  static MyString str;
> +};
> +template <typename T>
> +MyString StaticVarWithTypedefString<T>::str = "";
> +
> +void testStaticVarWithTypedefString() {
> +  (void)StaticVarWithTypedefString<int>::str;
> +}
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits



More information about the cfe-commits mailing list