[PATCH] D55685: Update Microsoft name mangling scheme for exception specifiers in the type system

Reid Kleckner via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Dec 14 14:51:39 PST 2018


rnk added inline comments.


================
Comment at: lib/AST/MicrosoftMangle.cpp:2311-2314
+  if (FT->canThrow())
+    Out << 'Z';
+  else
+    Out << "_E";
----------------
zahen wrote:
> zturner wrote:
> > I knew that the mangling changed whenever a pointer to a `noexcept` function is passed as an argument, and we don't yet handle that, but I'm surprised to hear that they changed an existing mangling, since it's a hard ABI break.
> > 
> > Do you know the major and minor version numbers that this changed in?  I'd like to test it out for starters, but also since this is an ABI break we would need to put it behind `-fms-compatibility-version` and only mangle using the new scheme when the compatibility version is sufficiently high.
> It's only when a function is used as a type.  My original rathole was trying to enumerate all of the places where that could be, but instead I settled on "everywhere but the initial definition".  It's why false is passed in the 4th parameter on line 516.
> 
> I've confirmed this changed in 15.5 so I'll use that as the compat version.
I see existing code that uses this pattern: `getLangOpts().isCompatibleWithMSVC(LangOptions::MSVC2015)`

The MSVCMajorVersion enum is symbolic, so I think you might have to multiply it by a hundred and modify LangOptions::isCompatibleWithMSVC to multiply by two fewer places.

I guess to fit with the existing enums we'd say MSVC2017_5, even though that conflates VS and VC version numbers.


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D55685/new/

https://reviews.llvm.org/D55685





More information about the cfe-commits mailing list