Skip to content

Commit 9c8a5b5

Browse files
committed
ASTDemangler: Fix demangling of weak/unowned/unowned(unsafe)
The check here was incorrect because we might have an optional of a reference type as well. Just remove the check to keep things simple.
1 parent 4a74bf4 commit 9c8a5b5

File tree

3 files changed

+33
-4
lines changed

3 files changed

+33
-4
lines changed

lib/AST/ASTDemangler.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -497,8 +497,6 @@ Type ASTBuilder::createDependentMemberType(StringRef member,
497497

498498
#define REF_STORAGE(Name, ...) \
499499
Type ASTBuilder::create##Name##StorageType(Type base) { \
500-
if (!base->allowsOwnership()) \
501-
return Type(); \
502500
return Name##StorageType::get(base, Ctx); \
503501
}
504502
#include "swift/AST/ReferenceStorage.def"
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// RUN: %empty-directory(%t)
2+
3+
// RUN: %target-build-swift -emit-executable %s -g -o %t/reference_storage -emit-module
4+
// RUN: sed -ne '/\/\/ *DEMANGLE: /s/\/\/ *DEMANGLE: *//p' < %s > %t/input
5+
// RUN: %lldb-moduleimport-test %t/reference_storage -type-from-mangled=%t/input | %FileCheck %s
6+
7+
func blackHole(_: Any...) {}
8+
9+
class Class {}
10+
11+
12+
let c = Class()
13+
14+
weak var weakVar: Class? = c
15+
unowned let unownedVar: Class = c
16+
unowned(unsafe) let unmanagedVar: Class = c
17+
18+
blackHole(weakVar, unownedVar, unmanagedVar)
19+
20+
// DEMANGLE: $s17reference_storage5ClassCSgXwD
21+
// DEMANGLE: $s17reference_storage5ClassCXoD
22+
// DEMANGLE: $s17reference_storage5ClassCXuD
23+
24+
// CHECK: @sil_weak Optional<Class>
25+
// CHECK: @sil_unowned Class
26+
// CHECK: @sil_unmanaged Class

tools/lldb-moduleimport-test/lldb-moduleimport-test.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
//===----------------------------------------------------------------------===//
1818

1919
#include "swift/AST/ASTDemangler.h"
20+
#include "swift/AST/PrintOptions.h"
2021
#include "swift/ASTSectionImporter/ASTSectionImporter.h"
2122
#include "swift/Frontend/Frontend.h"
2223
#include "swift/IDE/Utils.h"
@@ -99,7 +100,9 @@ static void resolveTypeFromMangledNameList(
99100
if (!ResolvedType) {
100101
llvm::outs() << "Can't resolve type of " << Mangled << "\n";
101102
} else {
102-
ResolvedType->print(llvm::outs());
103+
swift::PrintOptions PO;
104+
PO.PrintStorageRepresentationAttrs = true;
105+
ResolvedType->print(llvm::outs(), PO);
103106
llvm::outs() << "\n";
104107
}
105108
}
@@ -114,7 +117,9 @@ static void resolveTypeFromMangledNameListOld(
114117
if (!ResolvedType) {
115118
llvm::errs() << "Can't resolve type of " << Mangled << "\n";
116119
} else {
117-
ResolvedType->print(llvm::errs());
120+
swift::PrintOptions PO;
121+
PO.PrintStorageRepresentationAttrs = true;
122+
ResolvedType->print(llvm::errs(), PO);
118123
llvm::errs() << "\n";
119124
}
120125
}

0 commit comments

Comments
 (0)