From: Richard Smith Date: Fri, 9 Jan 2015 00:59:40 +0000 (+0000) Subject: Don't invent a '$auto-x-y' name for auto types in generic lambdas. This is no X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3f15abb9bb51e8f9184b934f71d5779ab0ff48ef;p=clang Don't invent a '$auto-x-y' name for auto types in generic lambdas. This is no better than the 'template-parameter-x-y' name that we'd get in AST printing, and is worse in several ways (it's harder to distinguish it from a user-supplied name, it's wrong after substituting some number of outer levels, it wastes time and space constructing an IdentifierInfo, ...). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@225489 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaType.cpp b/lib/Sema/SemaType.cpp index 6a910c2fc4..0f96a1cbce 100644 --- a/lib/Sema/SemaType.cpp +++ b/lib/Sema/SemaType.cpp @@ -1007,16 +1007,7 @@ static QualType ConvertDeclSpecToType(TypeProcessingState &state) { const unsigned TemplateParameterDepth = LSI->AutoTemplateParameterDepth; const unsigned AutoParameterPosition = LSI->AutoTemplateParams.size(); const bool IsParameterPack = declarator.hasEllipsis(); - - // Create a name for the invented template parameter type. - std::string InventedTemplateParamName = "$auto-"; - llvm::raw_string_ostream ss(InventedTemplateParamName); - ss << TemplateParameterDepth; - ss << "-" << AutoParameterPosition; - ss.flush(); - - IdentifierInfo& TemplateParamII = Context.Idents.get( - InventedTemplateParamName.c_str()); + // Turns out we must create the TemplateTypeParmDecl here to // retrieve the corresponding template parameter type. TemplateTypeParmDecl *CorrespondingTemplateParam = @@ -1031,7 +1022,7 @@ static QualType ConvertDeclSpecToType(TypeProcessingState &state) { /*NameLoc*/ declarator.getLocStart(), TemplateParameterDepth, AutoParameterPosition, // our template param index - /* Identifier*/ &TemplateParamII, false, IsParameterPack); + /* Identifier*/ nullptr, false, IsParameterPack); LSI->AutoTemplateParams.push_back(CorrespondingTemplateParam); // Replace the 'auto' in the function parameter with this invented // template type parameter. diff --git a/test/PCH/cxx1y-lambdas.mm b/test/PCH/cxx1y-lambdas.mm index ee4a2ba3ec..becf6cb642 100644 --- a/test/PCH/cxx1y-lambdas.mm +++ b/test/PCH/cxx1y-lambdas.mm @@ -50,7 +50,7 @@ int add(int x, int y) { } // CHECK-PRINT: inline int add_int_slowly_twice -// CHECK-PRINT: lambda = [] ($auto-0-0 z +// CHECK-PRINT: lambda = [] (type-parameter-0-0 z // CHECK-PRINT: init_capture // CHECK-PRINT: [&, x( t )]