Skip to content

Commit 06eb315

Browse files
committed
Update mangling for borrow and mutate accessors
1 parent a0c939b commit 06eb315

File tree

4 files changed

+29
-11
lines changed

4 files changed

+29
-11
lines changed

docs/ABI/Mangling.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -925,6 +925,9 @@ mangled in to disambiguate.
925925
RESULT-CONVENTION ::= 'u' // unowned inner pointer
926926
RESULT-CONVENTION ::= 'a' // auto-released
927927
RESULT-CONVENTION ::= 'k' // pack
928+
RESULT-CONVENTION ::= 'l' // guaranteed address
929+
RESULT-CONVENTION ::= 'g' // guaranteed
930+
RESULT-CONVENTION ::= 'm' // inout
928931

929932
RESULT-DIFFERENTIABILITY ::= 'w' // @noDerivative
930933

lib/AST/ASTMangler.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2288,10 +2288,12 @@ static char getResultConvention(ResultConvention conv) {
22882288
case ResultConvention::Autoreleased: return 'a';
22892289
case ResultConvention::Pack: return 'k';
22902290
case ResultConvention::GuaranteedAddress:
2291-
return 'g';
2291+
return 'l';
22922292
case ResultConvention::Guaranteed:
2293-
return 'G';
2294-
}
2293+
return 'g';
2294+
case ResultConvention::Inout:
2295+
return 'm';
2296+
}
22952297
llvm_unreachable("bad result convention");
22962298
}
22972299

lib/Demangling/Demangler.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2296,6 +2296,15 @@ NodePointer Demangler::demangleImplResultConvention(Node::Kind ConvKind) {
22962296
case 'u': attr = "@unowned_inner_pointer"; break;
22972297
case 'a': attr = "@autoreleased"; break;
22982298
case 'k': attr = "@pack_out"; break;
2299+
case 'l':
2300+
attr = "@guaranteed_addr";
2301+
break;
2302+
case 'g':
2303+
attr = "@guaranteed";
2304+
break;
2305+
case 'm':
2306+
attr = "@inout";
2307+
break;
22992308
default:
23002309
pushBack();
23012310
return nullptr;

lib/Demangling/Remangler.cpp

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2226,14 +2226,18 @@ ManglingError Remangler::mangleImplFunctionType(Node *node, unsigned depth) {
22262226
Buffer << 'z';
22272227
LLVM_FALLTHROUGH;
22282228
case Node::Kind::ImplResult: {
2229-
char ConvCh = llvm::StringSwitch<char>(Child->getFirstChild()->getText())
2230-
.Case("@out", 'r')
2231-
.Case("@owned", 'o')
2232-
.Case("@unowned", 'd')
2233-
.Case("@unowned_inner_pointer", 'u')
2234-
.Case("@autoreleased", 'a')
2235-
.Case("@pack_out", 'k')
2236-
.Default(0);
2229+
char ConvCh =
2230+
llvm::StringSwitch<char>(Child->getFirstChild()->getText())
2231+
.Case("@out", 'r')
2232+
.Case("@owned", 'o')
2233+
.Case("@unowned", 'd')
2234+
.Case("@unowned_inner_pointer", 'u')
2235+
.Case("@autoreleased", 'a')
2236+
.Case("@pack_out", 'k')
2237+
.Case("@guaranteed_addr", 'l')
2238+
.Case("@guaranteed", 'g')
2239+
.Case("@inout", 'm')
2240+
.Default(0);
22372241
if (!ConvCh) {
22382242
return MANGLING_ERROR(ManglingError::InvalidImplParameterConvention,
22392243
Child->getFirstChild());

0 commit comments

Comments
 (0)