summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-emit-cpp.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang-emit-cpp.cpp')
-rw-r--r--source/slang/slang-emit-cpp.cpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/source/slang/slang-emit-cpp.cpp b/source/slang/slang-emit-cpp.cpp
index 0c2b4cd93..e7c90f657 100644
--- a/source/slang/slang-emit-cpp.cpp
+++ b/source/slang/slang-emit-cpp.cpp
@@ -1611,7 +1611,7 @@ void CPPSourceEmitter::emitWitnessTable(IRWitnessTable* witnessTable)
_maybeEmitWitnessTableTypeDefinition(interfaceType);
// Define a global variable for the witness table.
- m_writer->emit("extern ");
+ m_writer->emit("extern \"C\" ");
emitSimpleType(interfaceType);
m_writer->emit(" ");
m_writer->emit(getName(witnessTable));
@@ -1692,7 +1692,13 @@ void CPPSourceEmitter::emitInterface(IRInterfaceType* interfaceType)
void CPPSourceEmitter::emitRTTIObject(IRRTTIObject* rttiObject)
{
- m_writer->emit("static TypeInfo ");
+ // Declare the type info object as `extern "C"` first.
+ m_writer->emit("extern \"C\" TypeInfo ");
+ m_writer->emit(getName(rttiObject));
+ m_writer->emit(";\n");
+
+ // Now actually define the object.
+ m_writer->emit("TypeInfo ");
m_writer->emit(getName(rttiObject));
m_writer->emit(" = {");
auto typeSizeDecoration = rttiObject->findDecoration<IRRTTITypeSizeDecoration>();