diff options
Diffstat (limited to 'gcc/d/dmd/cppmangle.c')
-rw-r--r-- | gcc/d/dmd/cppmangle.c | 18 |
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); } |