aboutsummaryrefslogtreecommitdiff
path: root/gcc/d/dmd/cppmangle.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/d/dmd/cppmangle.c')
-rw-r--r--gcc/d/dmd/cppmangle.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/gcc/d/dmd/cppmangle.c b/gcc/d/dmd/cppmangle.c
index a0e0b5f..baf64c5 100644
--- a/gcc/d/dmd/cppmangle.c
+++ b/gcc/d/dmd/cppmangle.c
@@ -806,6 +806,14 @@ public:
writeBasicType(t, 'D', 'n');
}
+ void visit(TypeNoreturn *t)
+ {
+ if (t->isImmutable() || t->isShared())
+ return error(t);
+
+ writeBasicType(t, 0, 'v'); // mangle like `void`
+ }
+
void visit(TypeBasic *t)
{
if (t->isImmutable() || t->isShared())
@@ -1012,7 +1020,7 @@ public:
if (t->isImmutable() || t->isShared())
return error(t);
- /* __c_(u)long(long) get special mangling
+ /* __c_(u)long(long) and others get special mangling
*/
Identifier *id = t->sym->ident;
//printf("enum id = '%s'\n", id->toChars());
@@ -1020,10 +1028,18 @@ public:
return writeBasicType(t, 0, 'l');
else if (id == Id::__c_ulong)
return writeBasicType(t, 0, 'm');
+ else if (id == Id::__c_wchar_t)
+ return writeBasicType(t, 0, 'w');
else if (id == Id::__c_longlong)
return writeBasicType(t, 0, 'x');
else if (id == Id::__c_ulonglong)
return writeBasicType(t, 0, 'y');
+ else if (id == Id::__c_complex_float)
+ return writeBasicType(t, 'C', 'f');
+ else if (id == Id::__c_complex_double)
+ return writeBasicType(t, 'C', 'd');
+ else if (id == Id::__c_complex_real)
+ return writeBasicType(t, 'C', 'e');
doSymbol(t);
}