Skip to content

Commit f39d645

Browse files
authored
Merge branch 'stable/20240723' into lldb-remove-bounds-safety-recognizer
2 parents c4264d6 + 6110cb1 commit f39d645

File tree

26 files changed

+651
-156
lines changed

26 files changed

+651
-156
lines changed

clang/include/clang/Frontend/CompilerInvocation.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,10 @@ class CompilerInvocation : public CompilerInvocationBase {
304304
return PPOpts;
305305
}
306306
std::shared_ptr<LangOptions> getLangOptsPtr() { return LangOpts; }
307+
std::shared_ptr<CASOptions> getCASOptsPtr() { return CASOpts; }
308+
void setCASOption(std::shared_ptr<CASOptions> CASOpts) {
309+
this->CASOpts = CASOpts;
310+
}
307311
/// @}
308312

309313
/// Create a compiler invocation from a list of input options.

clang/lib/Serialization/ASTReaderDecl.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3192,7 +3192,7 @@ bool ASTReader::isConsumerInterestedIn(Decl *D) {
31923192
// emitted when we import the relevant module.
31933193
if (isPartOfPerModuleInitializer(D)) {
31943194
auto *M = D->getImportedOwningModule();
3195-
if (M && M->Kind == Module::ModuleMapModule &&
3195+
if (M && M->isModuleMapModule() &&
31963196
getContext().DeclMustBeEmitted(D))
31973197
return false;
31983198
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
// Check that a definition for a symbol in an unimported submodule is not
2+
// visible for codegen.
3+
4+
// REQUIRES: ondisk_cas
5+
6+
// RUN: rm -rf %t
7+
// RUN: split-file %s %t
8+
// RUN: sed "s|DIR|%/t|g" %t/cdb.json.template > %t/cdb.json
9+
10+
// RUN: clang-scan-deps -compilation-database %t/cdb.json -j 1 \
11+
// RUN: -cas-path %t/cas -module-files-dir %t/outputs \
12+
// RUN: -format experimental-include-tree-full -mode preprocess-dependency-directives \
13+
// RUN: > %t/deps.json
14+
15+
// RUN: %deps-to-rsp %t/deps.json --module Mod > %t/Mod.rsp
16+
// RUN: %deps-to-rsp %t/deps.json --tu-index 0 > %t/tu.rsp
17+
// RUN: %clang @%t/Mod.rsp
18+
// RUN: %clang @%t/tu.rsp -o - | FileCheck %s
19+
20+
// CHECK-NOT: @record = global
21+
// CHECK: @record = external global
22+
23+
//--- cdb.json.template
24+
[{
25+
"file": "DIR/tu.c",
26+
"directory": "DIR",
27+
"command": "clang -S -emit-llvm DIR/tu.c -fmodules -fimplicit-modules -fimplicit-module-maps -fmodules-cache-path=DIR/module-cache"
28+
}]
29+
30+
//--- module.modulemap
31+
module Mod {
32+
module A {
33+
header "A.h"
34+
}
35+
explicit module B {
36+
header "B.h"
37+
}
38+
}
39+
40+
//--- A.h
41+
extern int record;
42+
43+
//--- B.h
44+
int record = 7;
45+
46+
//--- tu.c
47+
#include "A.h"
48+
int tu(void) {
49+
return record;
50+
}

lldb/source/Plugins/ExpressionParser/Swift/SwiftExpressionParser.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
#include "SwiftExpressionParser.h"
1414

15+
#include "Plugins/TypeSystem/Swift/SwiftASTContext.h"
1516
#include "SwiftASTManipulator.h"
1617
#include "SwiftDiagnostic.h"
1718
#include "SwiftExpressionSourceCode.h"
@@ -1181,8 +1182,9 @@ AddArchetypeTypeAliases(std::unique_ptr<SwiftASTManipulator> &code_manipulator,
11811182
llvm::StringRef &type_name = pair.getFirst();
11821183
MetadataPointerInfo &info = pair.getSecond();
11831184

1184-
auto dependent_type =
1185-
typeref_typesystem->CreateGenericTypeParamType(info.depth, info.index);
1185+
auto flavor = SwiftLanguageRuntime::GetManglingFlavor(type_name);
1186+
auto dependent_type = typeref_typesystem->CreateGenericTypeParamType(
1187+
info.depth, info.index, flavor);
11861188
auto bound_type =
11871189
runtime->BindGenericTypeParameters(stack_frame, dependent_type);
11881190
if (!bound_type) {

lldb/source/Plugins/ExpressionParser/Swift/SwiftExpressionSourceCode.cpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
//===----------------------------------------------------------------------===//
88

99
#include "SwiftExpressionSourceCode.h"
10+
#include "Plugins/LanguageRuntime/Swift/SwiftLanguageRuntime.h"
1011
#include "SwiftPersistentExpressionState.h"
1112

1213
#include "Plugins/ExpressionParser/Swift/SwiftASTManipulator.h"
@@ -60,10 +61,14 @@ static llvm::Expected<std::string> TransformPackType(
6061
if (!ts)
6162
return llvm::createStringError(llvm::errc::not_supported,
6263
"no typeref typesystem");
64+
65+
auto mangled_name = type.GetMangledTypeName().GetStringRef();
66+
auto flavor = SwiftLanguageRuntime::GetManglingFlavor(mangled_name);
67+
6368
using namespace swift::Demangle;
6469
Demangler dem;
65-
NodePointer node = ts->GetCanonicalDemangleTree(
66-
dem, type.GetMangledTypeName().GetStringRef());
70+
71+
NodePointer node = ts->GetCanonicalDemangleTree(dem, mangled_name);
6772

6873
node = TypeSystemSwiftTypeRef::Transform(dem, node, [](NodePointer n) {
6974
if (n->getKind() == Node::Kind::SILPackIndirect &&
@@ -76,7 +81,8 @@ static llvm::Expected<std::string> TransformPackType(
7681
});
7782

7883
bool error = false;
79-
ConstString type_name = ts->RemangleAsType(dem, node).GetMangledTypeName();
84+
ConstString type_name =
85+
ts->RemangleAsType(dem, node, flavor).GetMangledTypeName();
8086
swift::Demangle::DemangleOptions options;
8187
options = swift::Demangle::DemangleOptions::SimplifiedUIDemangleOptions();
8288
options.DisplayStdlibModule = false;

lldb/source/Plugins/Language/Swift/SwiftFormatters.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,8 @@ static bool makeStringGutsSummary(
257257
│ Immortal, Small ║ 1 │ASCII│ 1 │ 0 │
258258
├─────────────────────╫─────┼─────┼─────┼─────┤
259259
│ Immortal, Large ║ 1 │ 0 │ 0 │ 0 │
260+
├─────────────────────╫─────┼─────┼─────┼─────┤
261+
│ Immortal, Bridged ║ 1 │ 1 │ 0 │ 0 │
260262
╞═════════════════════╬═════╪═════╪═════╪═════╡
261263
│ Native ║ 0 │ 0 │ 0 │ 0 │
262264
├─────────────────────╫─────┼─────┼─────┼─────┤
@@ -373,7 +375,7 @@ static bool makeStringGutsSummary(
373375
if ((discriminator & 0b0111'0000) == 0)
374376
return error("unexpected discriminator");
375377

376-
if ((discriminator & 0b1110'0000) == 0b0100'0000) { // 010xxxxx: Bridged
378+
if ((discriminator & 0b0110'0000) == 0b0100'0000) { // x10xxxxx: Bridged
377379
TypeSystemClangSP clang_ts_sp =
378380
ScratchTypeSystemClang::GetForTarget(process->GetTarget());
379381
if (!clang_ts_sp)
@@ -805,6 +807,8 @@ class TaskSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
805807
ThreadSafeReflectionContext reflection_ctx =
806808
runtime->GetReflectionContext();
807809
ValueObjectSP task_obj_sp = m_backend.GetChildMemberWithName("_task");
810+
if (!task_obj_sp)
811+
return ChildCacheState::eRefetch;
808812
uint64_t task_ptr = task_obj_sp->GetValueAsUnsigned(LLDB_INVALID_ADDRESS);
809813
if (task_ptr != LLDB_INVALID_ADDRESS) {
810814
llvm::Expected<ReflectionContextInterface::AsyncTaskInfo> task_info =

lldb/source/Plugins/LanguageRuntime/Swift/SwiftLanguageRuntime.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include "lldb/Core/PluginInterface.h"
2121
#include "lldb/Target/LanguageRuntime.h"
2222
#include "lldb/lldb-private.h"
23+
#include "swift/Demangling/ManglingFlavor.h"
2324

2425
#include <optional>
2526
#include "llvm/ADT/StringSet.h"
@@ -132,6 +133,12 @@ class SwiftLanguageRuntime : public LanguageRuntime {
132133
/// since some day we may want to support more than one swift variant.
133134
static bool IsSwiftMangledName(llvm::StringRef name);
134135

136+
static swift::Mangle::ManglingFlavor
137+
GetManglingFlavor(llvm::StringRef mangledName) {
138+
if (mangledName.starts_with("$e") || mangledName.starts_with("_$e"))
139+
return swift::Mangle::ManglingFlavor::Embedded;
140+
return swift::Mangle::ManglingFlavor::Default;
141+
}
135142
enum class FuncletComparisonResult {
136143
NotBothFunclets,
137144
DifferentAsyncFunctions,
@@ -271,6 +278,7 @@ class SwiftLanguageRuntime : public LanguageRuntime {
271278
/// context.
272279
static void GetGenericParameterNamesForFunction(
273280
const SymbolContext &sc, const ExecutionContext *exe_ctx,
281+
swift::Mangle::ManglingFlavor flavor,
274282
llvm::DenseMap<ArchetypePath, llvm::StringRef> &dict);
275283

276284
/// Invoke callback for each DependentGenericParamType.

lldb/source/Plugins/LanguageRuntime/Swift/SwiftLanguageRuntimeDynamicTypeResolution.cpp

Lines changed: 54 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
#include "swift/AST/ASTMangler.h"
3737
#include "swift/AST/ASTWalker.h"
3838
#include "swift/Demangling/Demangle.h"
39+
#include "swift/Demangling/ManglingFlavor.h"
3940
#include "swift/RemoteInspection/ReflectionContext.h"
4041
#include "swift/RemoteInspection/TypeRefBuilder.h"
4142
#include "swift/Strings.h"
@@ -318,8 +319,11 @@ class LLDBTypeInfoProvider : public swift::remote::TypeInfoProvider {
318319
auto *node = dem.demangleSymbol(wrapped);
319320
if (!node) {
320321
// Try `mangledName` as plain ObjC class name. Ex: NSObject, NSView, etc.
322+
// Since this looking up an ObjC type, the default mangling falvor should
323+
// be used.
321324
auto maybeMangled = swift_demangle::mangleClass(
322-
dem, swift::MANGLING_MODULE_OBJC, mangledName);
325+
dem, swift::MANGLING_MODULE_OBJC, mangledName,
326+
swift::Mangle::ManglingFlavor::Default);
323327
if (!maybeMangled.isSuccess()) {
324328
LLDB_LOG(GetLog(LLDBLog::Types),
325329
"[LLDBTypeInfoProvider] invalid mangled name: {0}",
@@ -641,7 +645,9 @@ CompilerType GetWeakReferent(TypeSystemSwiftTypeRef &ts, CompilerType type) {
641645
if (!n || n->getKind() != Node::Kind::SugaredOptional || !n->hasChildren())
642646
return {};
643647
n = n->getFirstChild();
644-
return ts.RemangleAsType(dem, n);
648+
return ts.RemangleAsType(
649+
dem, n,
650+
SwiftLanguageRuntime::GetManglingFlavor(type.GetMangledTypeName()));
645651
}
646652

647653
CompilerType GetTypeFromTypeRef(TypeSystemSwiftTypeRef &ts,
@@ -650,7 +656,8 @@ CompilerType GetTypeFromTypeRef(TypeSystemSwiftTypeRef &ts,
650656
return {};
651657
swift::Demangle::Demangler dem;
652658
swift::Demangle::NodePointer node = type_ref->getDemangling(dem);
653-
return ts.RemangleAsType(dem, node);
659+
// TODO: the mangling flavor should come from the TypeRef.
660+
return ts.RemangleAsType(dem, node, ts.GetManglingFlavor());
654661
}
655662

656663
struct ExistentialSyntheticChild {
@@ -1567,8 +1574,9 @@ bool SwiftLanguageRuntimeImpl::GetDynamicTypeAndAddress_Pack(
15671574

15681575
swift::Demangle::Demangler dem;
15691576

1570-
auto expand_pack_type = [&](ConstString mangled_pack_type,
1571-
bool indirect) -> swift::Demangle::NodePointer {
1577+
auto expand_pack_type = [&](ConstString mangled_pack_type, bool indirect,
1578+
swift::Mangle::ManglingFlavor flavor)
1579+
-> swift::Demangle::NodePointer {
15721580
// Find pack_type in the pack_expansions.
15731581
unsigned i = 0;
15741582
SwiftLanguageRuntime::GenericSignature::PackExpansion *pack_expansion =
@@ -1698,7 +1706,7 @@ bool SwiftLanguageRuntimeImpl::GetDynamicTypeAndAddress_Pack(
16981706
auto bound_typeref = reflection_ctx->ApplySubstitutions(
16991707
type_ref, substitutions, ts->GetDescriptorFinder());
17001708
swift::Demangle::NodePointer node = bound_typeref->getDemangling(dem);
1701-
CompilerType type = ts->RemangleAsType(dem, node);
1709+
CompilerType type = ts->RemangleAsType(dem, node, flavor);
17021710

17031711
// Add the substituted type to the tuple.
17041712
elements.push_back({{}, type});
@@ -1724,6 +1732,9 @@ bool SwiftLanguageRuntimeImpl::GetDynamicTypeAndAddress_Pack(
17241732
auto node = dem_ctx.demangleSymbolAsNode(
17251733
pack_type.GetMangledTypeName().GetStringRef());
17261734

1735+
auto flavor =
1736+
SwiftLanguageRuntime::GetManglingFlavor(pack_type.GetMangledTypeName());
1737+
17271738
// Expand all the pack types that appear in the incoming type,
17281739
// either at the root level or as arguments of bound generic types.
17291740
bool indirect = false;
@@ -1739,18 +1750,18 @@ bool SwiftLanguageRuntimeImpl::GetDynamicTypeAndAddress_Pack(
17391750
if (node->getNumChildren() != 1)
17401751
return node;
17411752
node = node->getChild(0);
1742-
CompilerType pack_type = ts->RemangleAsType(dem, node);
1753+
CompilerType pack_type = ts->RemangleAsType(dem, node, flavor);
17431754
ConstString mangled_pack_type = pack_type.GetMangledTypeName();
17441755
LLDB_LOG(log, "decoded pack_expansion type: {0}", mangled_pack_type);
1745-
auto result = expand_pack_type(mangled_pack_type, indirect);
1756+
auto result = expand_pack_type(mangled_pack_type, indirect, flavor);
17461757
if (!result) {
17471758
LLDB_LOG(log, "failed to expand pack type: {0}", mangled_pack_type);
17481759
return node;
17491760
}
17501761
return result;
17511762
});
17521763

1753-
CompilerType expanded_type = ts->RemangleAsType(dem, transformed);
1764+
CompilerType expanded_type = ts->RemangleAsType(dem, transformed, flavor);
17541765
pack_type_or_name.SetCompilerType(expanded_type);
17551766

17561767
AddressType address_type;
@@ -1824,7 +1835,8 @@ bool SwiftLanguageRuntimeImpl::GetDynamicTypeAndAddress_Class(
18241835
// useful to users.
18251836
if (IsPrivateNSClass(node))
18261837
return false;
1827-
class_type_or_name.SetCompilerType(ts->RemangleAsType(dem, node));
1838+
class_type_or_name.SetCompilerType(ts->RemangleAsType(
1839+
dem, node, swift::Mangle::ManglingFlavor::Default));
18281840
found = true;
18291841
return true;
18301842
}
@@ -1854,9 +1866,13 @@ bool SwiftLanguageRuntimeImpl::GetDynamicTypeAndAddress_Class(
18541866
class_type.GetMangledTypeName(), instance_ptr);
18551867
return false;
18561868
}
1869+
1870+
auto flavor =
1871+
SwiftLanguageRuntime::GetManglingFlavor(class_type.GetMangledTypeName());
1872+
18571873
swift::Demangle::Demangler dem;
18581874
swift::Demangle::NodePointer node = typeref->getDemangling(dem);
1859-
CompilerType dynamic_type = ts->RemangleAsType(dem, node);
1875+
CompilerType dynamic_type = ts->RemangleAsType(dem, node, flavor);
18601876
LLDB_LOG(log, "dynamic type of instance_ptr {0:x} is {1}", instance_ptr,
18611877
class_type.GetMangledTypeName());
18621878
class_type_or_name.SetCompilerType(dynamic_type);
@@ -2022,7 +2038,10 @@ bool SwiftLanguageRuntimeImpl::GetDynamicTypeAndAddress_Existential(
20222038
return false;
20232039
swift::Demangle::Demangler dem;
20242040
swift::Demangle::NodePointer node = typeref->getDemangling(dem);
2025-
class_type_or_name.SetCompilerType(ts->RemangleAsType(dem, node));
2041+
auto flavor = SwiftLanguageRuntime::GetManglingFlavor(
2042+
existential_type.GetMangledTypeName());
2043+
2044+
class_type_or_name.SetCompilerType(ts->RemangleAsType(dem, node, flavor));
20262045
address.SetRawAddress(out_address.getAddressData());
20272046

20282047
#ifndef NDEBUG
@@ -2087,7 +2106,10 @@ bool SwiftLanguageRuntimeImpl::GetDynamicTypeAndAddress_ExistentialMetatype(
20872106
meta->addChild(node, dem);
20882107
wrapped->addChild(meta,dem);
20892108

2090-
meta_type = tr_ts->RemangleAsType(dem, wrapped);
2109+
auto flavor =
2110+
SwiftLanguageRuntime::GetManglingFlavor(meta_type.GetMangledTypeName());
2111+
meta_type =
2112+
tss->GetTypeSystemSwiftTypeRef()->RemangleAsType(dem, wrapped, flavor);
20912113
class_type_or_name.SetCompilerType(meta_type);
20922114
address.SetRawAddress(ptr);
20932115
return true;
@@ -2113,7 +2135,9 @@ CompilerType SwiftLanguageRuntimeImpl::GetTypeFromMetadata(TypeSystemSwift &ts,
21132135
using namespace swift::Demangle;
21142136
Demangler dem;
21152137
NodePointer node = type_ref->getDemangling(dem);
2116-
return tr_ts->RemangleAsType(dem, node);
2138+
// TODO: the mangling flavor should come from the TypeRef.
2139+
return ts.GetTypeSystemSwiftTypeRef()->RemangleAsType(
2140+
dem, node, ts.GetTypeSystemSwiftTypeRef()->GetManglingFlavor());
21172141
}
21182142

21192143
std::optional<lldb::addr_t>
@@ -2236,7 +2260,10 @@ CompilerType SwiftLanguageRuntimeImpl::BindGenericTypeParameters(
22362260
type_ref, substitutions,
22372261
tr_ts->GetDescriptorFinder());
22382262
NodePointer node = bound_type_ref->getDemangling(dem);
2239-
return tr_ts->RemangleAsType(dem, node);
2263+
return ts->GetTypeSystemSwiftTypeRef()->RemangleAsType(
2264+
dem, node,
2265+
SwiftLanguageRuntime::GetManglingFlavor(
2266+
unbound_type.GetMangledTypeName()));
22402267
}
22412268

22422269
CompilerType
@@ -2278,10 +2305,12 @@ SwiftLanguageRuntimeImpl::BindGenericTypeParameters(StackFrame &stack_frame,
22782305
return;
22792306
substitutions.insert({{depth, index}, type_ref});
22802307
});
2308+
auto flavor =
2309+
SwiftLanguageRuntime::GetManglingFlavor(mangled_name.GetStringRef());
22812310

22822311
// Nothing to do if there are no type parameters.
22832312
auto get_canonical = [&]() {
2284-
auto mangling = mangleNode(canonical);
2313+
auto mangling = mangleNode(canonical, flavor);
22852314
if (!mangling.isSuccess())
22862315
return CompilerType();
22872316
return ts.GetTypeFromMangledTypename(ConstString(mangling.result()));
@@ -2315,7 +2344,7 @@ SwiftLanguageRuntimeImpl::BindGenericTypeParameters(StackFrame &stack_frame,
23152344
"No scratch context available.");
23162345
return ts.GetTypeFromMangledTypename(mangled_name);
23172346
}
2318-
CompilerType bound_type = scratch_ctx->RemangleAsType(dem, node);
2347+
CompilerType bound_type = scratch_ctx->RemangleAsType(dem, node, flavor);
23192348
LLDB_LOG(GetLog(LLDBLog::Expressions | LLDBLog::Types), "Bound {0} -> {1}.",
23202349
mangled_name, bound_type.GetMangledTypeName());
23212350
return bound_type;
@@ -2640,6 +2669,13 @@ bool SwiftLanguageRuntimeImpl::GetDynamicTypeAndAddress_ClangType(
26402669

26412670
std::string remangled;
26422671
{
2672+
auto type = in_value.GetCompilerType();
2673+
std::optional<swift::Mangle::ManglingFlavor> mangling_flavor =
2674+
SwiftLanguageRuntime::GetManglingFlavor(
2675+
type.GetMangledTypeName().GetStringRef());
2676+
if (!mangling_flavor)
2677+
return false;
2678+
26432679
// Create a mangle tree for Swift.Optional<$module.$class>
26442680
using namespace swift::Demangle;
26452681
NodeFactory factory;
@@ -2668,7 +2704,7 @@ bool SwiftLanguageRuntimeImpl::GetDynamicTypeAndAddress_ClangType(
26682704
factory);
26692705
cty->addChild(c, factory);
26702706

2671-
auto mangling = mangleNode(global);
2707+
auto mangling = mangleNode(global, *mangling_flavor);
26722708
if (!mangling.isSuccess())
26732709
return false;
26742710
remangled = mangling.result();

0 commit comments

Comments
 (0)