[PATCH] D47875: [MS ABI] Mangle unnamed empty enums (PR37723)

David Majnemer via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Jun 7 07:54:21 PDT 2018


majnemer added inline comments.


================
Comment at: lib/AST/MicrosoftMangle.cpp:888-891
         auto EnumeratorI = ED->enumerator_begin();
-        assert(EnumeratorI != ED->enumerator_end());
-        Name += "<unnamed-enum-";
-        Name += EnumeratorI->getName();
+        if (EnumeratorI == ED->enumerator_end()) {
+          Name += "<unnamed-tag";
+        } else {
----------------
Thinking about it some more, it'd be better if we handled this like the else case:
  Name += "<unnamed-type-$S";
  Name += llvm::utostr(Context.getAnonymousStructId(TD) + 1);

Reason being that something like:
  struct S {
    enum {};
    enum {};
  };

Would otherwise end up with two identical mangles.

This would also make us more consistent with other mangles, for example:
  enum {} x;
  struct {} y;

These are mangled as: <unnamed-type-x> and <unnamed-type-y>.


https://reviews.llvm.org/D47875





More information about the cfe-commits mailing list