diff options
Diffstat (limited to 'gcc/cp/mangle.c')
-rw-r--r-- | gcc/cp/mangle.c | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/gcc/cp/mangle.c b/gcc/cp/mangle.c index 360e1fc759d..623fc3d3504 100644 --- a/gcc/cp/mangle.c +++ b/gcc/cp/mangle.c @@ -1506,8 +1506,8 @@ write_CV_qualifiers_for_type (type) ::= m # unsigned long ::= x # long long, __int64 ::= y # unsigned long long, __int64 - ::= n # __int128 [not supported] - ::= o # unsigned __int128 [not supported] + ::= n # __int128 + ::= o # unsigned __int128 ::= f # float ::= d # double ::= e # long double, __float80 @@ -1552,15 +1552,23 @@ write_builtin_type (type) write_char (integer_type_codes[itk]); break; } - + if (itk == itk_none) { tree t = type_for_mode (TYPE_MODE (type), TREE_UNSIGNED (type)); if (type == t) - /* Couldn't find this type. */ - abort (); - type = t; - goto iagain; + { + if (TYPE_PRECISION (type) == 128) + write_char (TREE_UNSIGNED (type) ? 'o' : 'n'); + else + /* Couldn't find this type. */ + abort (); + } + else + { + type = t; + goto iagain; + } } } break; |