diff --git a/clang/lib/AST/Mangle.cpp b/clang/lib/AST/Mangle.cpp --- a/clang/lib/AST/Mangle.cpp +++ b/clang/lib/AST/Mangle.cpp @@ -36,11 +36,14 @@ StringRef Outer, const BlockDecl *BD, raw_ostream &Out) { - unsigned discriminator = Context.getBlockId(BD, true); - if (discriminator == 0) - Out << "__" << Outer << "_block_invoke"; - else - Out << "__" << Outer << "_block_invoke_" << discriminator+1; + Out << "__" << Outer << "_block_invoke__"; + + ArrayRef params = BD->parameters(); + for(unsigned i = 0; i < params.size(); i++) { + ParmVarDecl *param = params[i]; + Out << "_"; + Context.mangleTypeName(param->getType(), Out); + } } void MangleContext::anchor() { }