majnemer added a comment. We need tests that show that it does the right thing in blocks defined in classes in classes and other nested concepts.
================ Comment at: lib/AST/MicrosoftMangle.cpp:980-981 + unsigned Discriminator = BD->getBlockManglingNumber(); + if (!Discriminator) + Discriminator = Context.getBlockId(BD, /*Local=*/false); + ---------------- Why isn't it local? ================ Comment at: lib/AST/MicrosoftMangle.cpp:991-992 + Out << '@'; + // void __cdecl + Out << "YAX"; + // struct __block_literal * ---------------- Can blocks not be given a specific calling convention? ================ Comment at: lib/AST/MicrosoftMangle.cpp:993-994 + Out << "YAX"; + // struct __block_literal * + Out << "PA"; + mangleArtificalTagType(TTK_Struct, ---------------- Shouldn't we also mangle an 'E' in here on 64-bit platforms? ================ Comment at: lib/AST/MicrosoftMangle.cpp:999-1001 + if (const auto *MC = BD->getBlockManglingContextDecl()) + if (const auto *ND = dyn_cast<NamedDecl>(MC)) + mangleUnqualifiedName(ND); ---------------- This logic should be explained. ================ Comment at: lib/AST/MicrosoftMangle.cpp:1003-1005 + if (isa<RecordDecl>(DC)) + break; + continue; ---------------- This logic should be explained. Repository: rL LLVM https://reviews.llvm.org/D34523 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits