hans created this revision.
hans added a reviewer: majnemer.

Clang would previously assert here.


https://reviews.llvm.org/D47875

Files:
  lib/AST/MicrosoftMangle.cpp
  test/CodeGenCXX/mangle-ms-cxx11.cpp


Index: test/CodeGenCXX/mangle-ms-cxx11.cpp
===================================================================
--- test/CodeGenCXX/mangle-ms-cxx11.cpp
+++ test/CodeGenCXX/mangle-ms-cxx11.cpp
@@ -1,5 +1,6 @@
 // RUN: %clang_cc1 -std=c++11 -fms-extensions -emit-llvm %s -o - 
-triple=i386-pc-win32 -fms-compatibility-version=19.00 | FileCheck %s 
--check-prefix=CHECK --check-prefix=MSVC2015
 // RUN: %clang_cc1 -std=c++11 -fms-extensions -emit-llvm %s -o - 
-triple=i386-pc-win32 -fms-compatibility-version=18.00 | FileCheck %s 
--check-prefix=CHECK --check-prefix=MSVC2013
+// RUN: %clang_cc1 -std=c++11 -fms-extensions -emit-llvm %s -o - 
-triple=i386-pc-win32 -gcodeview -debug-info-kind=limited | FileCheck %s 
--check-prefix=DBG
 
 namespace FTypeWithQuals {
 template <typename T>
@@ -350,3 +351,9 @@
 void f(decltype(enumerator)) {}
 // CHECK-DAG: define internal void @"?f@@YAXW4<unnamed-enum-enumerator>@@@Z"(
 void use_f() { f(enumerator); }
+
+namespace pr37723 {
+struct s { enum {}; };
+// DBG-DAG: DW_TAG_enumeration_type{{.*}}identifier: 
".?AW4<unnamed-tag>@s@pr37723@@"
+s x;
+}
Index: lib/AST/MicrosoftMangle.cpp
===================================================================
--- lib/AST/MicrosoftMangle.cpp
+++ lib/AST/MicrosoftMangle.cpp
@@ -886,9 +886,12 @@
         Name += TND->getName();
       } else if (auto *ED = dyn_cast<EnumDecl>(TD)) {
         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 {
+          Name += "<unnamed-enum-";
+          Name += EnumeratorI->getName();
+        }
       } else {
         // Otherwise, number the types using a $S prefix.
         Name += "<unnamed-type-$S";


Index: test/CodeGenCXX/mangle-ms-cxx11.cpp
===================================================================
--- test/CodeGenCXX/mangle-ms-cxx11.cpp
+++ test/CodeGenCXX/mangle-ms-cxx11.cpp
@@ -1,5 +1,6 @@
 // RUN: %clang_cc1 -std=c++11 -fms-extensions -emit-llvm %s -o - -triple=i386-pc-win32 -fms-compatibility-version=19.00 | FileCheck %s --check-prefix=CHECK --check-prefix=MSVC2015
 // RUN: %clang_cc1 -std=c++11 -fms-extensions -emit-llvm %s -o - -triple=i386-pc-win32 -fms-compatibility-version=18.00 | FileCheck %s --check-prefix=CHECK --check-prefix=MSVC2013
+// RUN: %clang_cc1 -std=c++11 -fms-extensions -emit-llvm %s -o - -triple=i386-pc-win32 -gcodeview -debug-info-kind=limited | FileCheck %s --check-prefix=DBG
 
 namespace FTypeWithQuals {
 template <typename T>
@@ -350,3 +351,9 @@
 void f(decltype(enumerator)) {}
 // CHECK-DAG: define internal void @"?f@@YAXW4<unnamed-enum-enumerator>@@@Z"(
 void use_f() { f(enumerator); }
+
+namespace pr37723 {
+struct s { enum {}; };
+// DBG-DAG: DW_TAG_enumeration_type{{.*}}identifier: ".?AW4<unnamed-tag>@s@pr37723@@"
+s x;
+}
Index: lib/AST/MicrosoftMangle.cpp
===================================================================
--- lib/AST/MicrosoftMangle.cpp
+++ lib/AST/MicrosoftMangle.cpp
@@ -886,9 +886,12 @@
         Name += TND->getName();
       } else if (auto *ED = dyn_cast<EnumDecl>(TD)) {
         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 {
+          Name += "<unnamed-enum-";
+          Name += EnumeratorI->getName();
+        }
       } else {
         // Otherwise, number the types using a $S prefix.
         Name += "<unnamed-type-$S";
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to