]> granicus.if.org Git - clang/commitdiff
[clang][IFS] Escape mangled names so MS ABI doesn't break YAML parsing.
authorPuyan Lotfi <puyan@puyan.org>
Mon, 14 Oct 2019 18:03:03 +0000 (18:03 +0000)
committerPuyan Lotfi <puyan@puyan.org>
Mon, 14 Oct 2019 18:03:03 +0000 (18:03 +0000)
Microsoft's ABI mangles names differently than Itanium and this breaks the LLVM
yaml parser unless the name is escaped in quotes. Quotes are being added to the
mangled names of the IFS file generation so that llvm-ifs doesn't break when
Windows triples are passed to the driver.

Differential Revision: https://reviews.llvm.org/D68915

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@374798 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Frontend/InterfaceStubFunctionsConsumer.cpp
test/InterfaceStubs/inline.c
test/InterfaceStubs/object.c
test/InterfaceStubs/windows.cpp [new file with mode: 0644]

index 5ce7a36ac9082a3dd0906874d783e345c064cbff..0b28b78de3b13eb82df1686ecd207d6501327f02 100644 (file)
@@ -263,11 +263,11 @@ public:
       for (const auto &E : Symbols) {
         const MangledSymbol &Symbol = E.second;
         for (auto Name : Symbol.Names) {
-          OS << "  "
+          OS << "  \""
              << (Symbol.ParentName.empty() || Instance.getLangOpts().CPlusPlus
                      ? ""
                      : (Symbol.ParentName + "."))
-             << Name << ": { Type: ";
+             << Name << "\" : { Type: ";
           switch (Symbol.Type) {
           default:
             llvm_unreachable(
index 06a58c4c1bea4e9dc8ede84a0f96a9f10e27be66..6f0cb519ca4edf7c9a797ec59838ff059d616610 100644 (file)
@@ -56,8 +56,8 @@ INLINE int foo() {
 // RUN: -c -std=gnu89 -xc %s | llvm-nm - 2>&1 | \
 // RUN: FileCheck -check-prefix=CHECK-SYMBOLS %s
 
-// CHECK-TAPI-DAG: foo: { Type: Func }
-// CHECK-TAPI-DAG: foo.var: { Type: Object, Size: 4 }
+// CHECK-TAPI-DAG: "foo" : { Type: Func }
+// CHECK-TAPI-DAG: "foo.var" : { Type: Object, Size: 4 }
 // CHECK-SYMBOLS-DAG: foo
 // CHECK-SYMBOLS-DAG: foo.var
 #include "inline.h"
index 774b79ddec1779f2c096225b5c616f9bd7a5a4c9..0687e2c811d66fb5234ec9892690faa8462dad48 100644 (file)
@@ -2,6 +2,6 @@
 // RUN: %clang -fvisibility=default -c -o - -emit-interface-stubs %s | FileCheck -check-prefix=CHECK-SYMBOLS %s
 // RUN: %clang -fvisibility=default -c -o - %s | llvm-nm - 2>&1 | FileCheck -check-prefix=CHECK-SYMBOLS %s
 
-// CHECK-TAPI: data: { Type: Object, Size: 4 }
+// CHECK-TAPI: "data" : { Type: Object, Size: 4 }
 // CHECK-SYMBOLS: data
 int data = 42;
diff --git a/test/InterfaceStubs/windows.cpp b/test/InterfaceStubs/windows.cpp
new file mode 100644 (file)
index 0000000..5bf5a68
--- /dev/null
@@ -0,0 +1,7 @@
+// REQUIRES: x86-registered-target
+// RUN: %clang -target x86_64-windows-msvc -o - %s \
+// RUN: -emit-interface-stubs -emit-merged-ifs | FileCheck %s
+
+// CHECK: Symbols:
+// CHECK-NEXT: ?helloWindowsMsvc@@YAHXZ
+int helloWindowsMsvc();