Skip to content

Commit f2ea6b1

Browse files
committed
Merge from '"main"' to '"sycl-web"' (3 commits)
CONFLICT (content): Merge conflict in clang/tools/clang-offload-bundler/ClangOffloadBundler.cpp CONFLICT (content): Merge conflict in clang/lib/Driver/ToolChains/Clang.cpp
2 parents 0a69df0 + 94e2b02 commit f2ea6b1

File tree

165 files changed

+5763
-5708
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

165 files changed

+5763
-5708
lines changed

clang/lib/AST/ASTImporter.cpp

Lines changed: 87 additions & 169 deletions
Original file line numberDiff line numberDiff line change
@@ -8519,7 +8519,8 @@ template <typename T> struct AttrArgArrayImporter {
85198519
};
85208520

85218521
class AttrImporter {
8522-
Error Err = Error::success();
8522+
Error Err{Error::success()};
8523+
Attr *ToAttr = nullptr;
85238524
ASTImporter &Importer;
85248525
ASTNodeImporter NImporter;
85258526

@@ -8528,15 +8529,14 @@ class AttrImporter {
85288529

85298530
// Create an "importer" for an attribute parameter.
85308531
// Result of the 'value()' of that object is to be passed to the function
8531-
// 'createImpoprtedAttr', in the order that is expected by the attribute
8532-
// class.
8532+
// 'importAttr', in the order that is expected by the attribute class.
85338533
template <class T> AttrArgImporter<T> importArg(const T &From) {
85348534
return AttrArgImporter<T>(NImporter, Err, From);
85358535
}
85368536

85378537
// Create an "importer" for an attribute parameter that has array type.
85388538
// Result of the 'value()' of that object is to be passed to the function
8539-
// 'createImpoprtedAttr', then the size of the array as next argument.
8539+
// 'importAttr', then the size of the array as next argument.
85408540
template <typename T>
85418541
AttrArgArrayImporter<T> importArrayArg(const llvm::iterator_range<T *> &From,
85428542
unsigned ArraySize) {
@@ -8549,10 +8549,13 @@ class AttrImporter {
85498549
// (The 'Create' with 'ASTContext' first and 'AttributeCommonInfo' last is
85508550
// used here.) As much data is copied or imported from the old attribute
85518551
// as possible. The passed arguments should be already imported.
8552+
// If an import error happens, the internal error is set to it, and any
8553+
// further import attempt is ignored.
85528554
template <typename T, typename... Arg>
8553-
Expected<Attr *> createImportedAttr(const T *FromAttr, Arg &&...ImportedArg) {
8555+
void importAttr(const T *FromAttr, Arg &&...ImportedArg) {
85548556
static_assert(std::is_base_of<Attr, T>::value,
85558557
"T should be subclass of Attr.");
8558+
assert(!ToAttr && "Use one AttrImporter to import one Attribute object.");
85568559

85578560
const IdentifierInfo *ToAttrName = Importer.Import(FromAttr->getAttrName());
85588561
const IdentifierInfo *ToScopeName =
@@ -8563,262 +8566,177 @@ class AttrImporter {
85638566
NImporter.importChecked(Err, FromAttr->getScopeLoc());
85648567

85658568
if (Err)
8566-
return std::move(Err);
8569+
return;
85678570

85688571
AttributeCommonInfo ToI(ToAttrName, ToScopeName, ToAttrRange, ToScopeLoc,
85698572
FromAttr->getParsedKind(), FromAttr->getSyntax(),
85708573
FromAttr->getAttributeSpellingListIndex());
85718574
// The "SemanticSpelling" is not needed to be passed to the constructor.
85728575
// That value is recalculated from the SpellingListIndex if needed.
8573-
T *ToAttr = T::Create(Importer.getToContext(),
8574-
std::forward<Arg>(ImportedArg)..., ToI);
8576+
ToAttr = T::Create(Importer.getToContext(),
8577+
std::forward<Arg>(ImportedArg)..., ToI);
85758578

85768579
ToAttr->setImplicit(FromAttr->isImplicit());
85778580
ToAttr->setPackExpansion(FromAttr->isPackExpansion());
85788581
if (auto *ToInheritableAttr = dyn_cast<InheritableAttr>(ToAttr))
85798582
ToInheritableAttr->setInherited(FromAttr->isInherited());
8583+
}
8584+
8585+
// Create a clone of the 'FromAttr' and import its source range only.
8586+
// This causes objects with invalid references to be created if the 'FromAttr'
8587+
// contains other data that should be imported.
8588+
void cloneAttr(const Attr *FromAttr) {
8589+
assert(!ToAttr && "Use one AttrImporter to import one Attribute object.");
85808590

8591+
SourceRange ToRange = NImporter.importChecked(Err, FromAttr->getRange());
8592+
if (Err)
8593+
return;
8594+
8595+
ToAttr = FromAttr->clone(Importer.getToContext());
8596+
ToAttr->setRange(ToRange);
8597+
}
8598+
8599+
// Get the result of the previous import attempt (can be used only once).
8600+
llvm::Expected<Attr *> getResult() && {
8601+
if (Err)
8602+
return std::move(Err);
8603+
assert(ToAttr && "Attribute should be created.");
85818604
return ToAttr;
85828605
}
85838606
};
85848607

85858608
Expected<Attr *> ASTImporter::Import(const Attr *FromAttr) {
8586-
Attr *ToAttr = nullptr;
8587-
// FIXME: Use AttrImporter as much as possible, try to remove the import
8588-
// of range from here.
8589-
SourceRange ToRange;
8590-
if (Error Err = importInto(ToRange, FromAttr->getRange()))
8591-
return std::move(Err);
8609+
AttrImporter AI(*this);
85928610

85938611
// FIXME: Is there some kind of AttrVisitor to use here?
85948612
switch (FromAttr->getKind()) {
85958613
case attr::Aligned: {
85968614
auto *From = cast<AlignedAttr>(FromAttr);
8597-
AlignedAttr *To;
8598-
auto CreateAlign = [&](bool IsAlignmentExpr, void *Alignment) {
8599-
return AlignedAttr::Create(ToContext, IsAlignmentExpr, Alignment, ToRange,
8600-
From->getSyntax(),
8601-
From->getSemanticSpelling());
8602-
};
8603-
if (From->isAlignmentExpr()) {
8604-
if (auto ToEOrErr = Import(From->getAlignmentExpr()))
8605-
To = CreateAlign(true, *ToEOrErr);
8606-
else
8607-
return ToEOrErr.takeError();
8608-
} else {
8609-
if (auto ToTOrErr = Import(From->getAlignmentType()))
8610-
To = CreateAlign(false, *ToTOrErr);
8611-
else
8612-
return ToTOrErr.takeError();
8613-
}
8614-
To->setInherited(From->isInherited());
8615-
To->setPackExpansion(From->isPackExpansion());
8616-
To->setImplicit(From->isImplicit());
8617-
ToAttr = To;
8615+
if (From->isAlignmentExpr())
8616+
AI.importAttr(From, true, AI.importArg(From->getAlignmentExpr()).value());
8617+
else
8618+
AI.importAttr(From, false,
8619+
AI.importArg(From->getAlignmentType()).value());
86188620
break;
86198621
}
8622+
86208623
case attr::Format: {
86218624
const auto *From = cast<FormatAttr>(FromAttr);
8622-
FormatAttr *To;
8623-
IdentifierInfo *ToAttrType = Import(From->getType());
8624-
To = FormatAttr::Create(ToContext, ToAttrType, From->getFormatIdx(),
8625-
From->getFirstArg(), ToRange, From->getSyntax());
8626-
To->setInherited(From->isInherited());
8627-
ToAttr = To;
8625+
AI.importAttr(From, Import(From->getType()), From->getFormatIdx(),
8626+
From->getFirstArg());
86288627
break;
86298628
}
86308629

86318630
case attr::AssertCapability: {
86328631
const auto *From = cast<AssertCapabilityAttr>(FromAttr);
8633-
AttrImporter AI(*this);
8634-
Expected<Attr *> ToAttrOrErr = AI.createImportedAttr(
8635-
From, AI.importArrayArg(From->args(), From->args_size()).value(),
8636-
From->args_size());
8637-
if (ToAttrOrErr)
8638-
ToAttr = *ToAttrOrErr;
8639-
else
8640-
return ToAttrOrErr.takeError();
8632+
AI.importAttr(From,
8633+
AI.importArrayArg(From->args(), From->args_size()).value(),
8634+
From->args_size());
86418635
break;
86428636
}
86438637
case attr::AcquireCapability: {
86448638
const auto *From = cast<AcquireCapabilityAttr>(FromAttr);
8645-
AttrImporter AI(*this);
8646-
Expected<Attr *> ToAttrOrErr = AI.createImportedAttr(
8647-
From, AI.importArrayArg(From->args(), From->args_size()).value(),
8648-
From->args_size());
8649-
if (ToAttrOrErr)
8650-
ToAttr = *ToAttrOrErr;
8651-
else
8652-
return ToAttrOrErr.takeError();
8639+
AI.importAttr(From,
8640+
AI.importArrayArg(From->args(), From->args_size()).value(),
8641+
From->args_size());
86538642
break;
86548643
}
86558644
case attr::TryAcquireCapability: {
86568645
const auto *From = cast<TryAcquireCapabilityAttr>(FromAttr);
8657-
AttrImporter AI(*this);
8658-
Expected<Attr *> ToAttrOrErr = AI.createImportedAttr(
8659-
From, AI.importArg(From->getSuccessValue()).value(),
8660-
AI.importArrayArg(From->args(), From->args_size()).value(),
8661-
From->args_size());
8662-
if (ToAttrOrErr)
8663-
ToAttr = *ToAttrOrErr;
8664-
else
8665-
return ToAttrOrErr.takeError();
8646+
AI.importAttr(From, AI.importArg(From->getSuccessValue()).value(),
8647+
AI.importArrayArg(From->args(), From->args_size()).value(),
8648+
From->args_size());
86668649
break;
86678650
}
86688651
case attr::ReleaseCapability: {
86698652
const auto *From = cast<ReleaseCapabilityAttr>(FromAttr);
8670-
AttrImporter AI(*this);
8671-
Expected<Attr *> ToAttrOrErr = AI.createImportedAttr(
8672-
From, AI.importArrayArg(From->args(), From->args_size()).value(),
8673-
From->args_size());
8674-
if (ToAttrOrErr)
8675-
ToAttr = *ToAttrOrErr;
8676-
else
8677-
return ToAttrOrErr.takeError();
8653+
AI.importAttr(From,
8654+
AI.importArrayArg(From->args(), From->args_size()).value(),
8655+
From->args_size());
86788656
break;
86798657
}
86808658
case attr::RequiresCapability: {
86818659
const auto *From = cast<RequiresCapabilityAttr>(FromAttr);
8682-
AttrImporter AI(*this);
8683-
Expected<Attr *> ToAttrOrErr = AI.createImportedAttr(
8684-
From, AI.importArrayArg(From->args(), From->args_size()).value(),
8685-
From->args_size());
8686-
if (ToAttrOrErr)
8687-
ToAttr = *ToAttrOrErr;
8688-
else
8689-
return ToAttrOrErr.takeError();
8660+
AI.importAttr(From,
8661+
AI.importArrayArg(From->args(), From->args_size()).value(),
8662+
From->args_size());
86908663
break;
86918664
}
86928665
case attr::GuardedBy: {
86938666
const auto *From = cast<GuardedByAttr>(FromAttr);
8694-
AttrImporter AI(*this);
8695-
Expected<Attr *> ToAttrOrErr =
8696-
AI.createImportedAttr(From, AI.importArg(From->getArg()).value());
8697-
if (ToAttrOrErr)
8698-
ToAttr = *ToAttrOrErr;
8699-
else
8700-
return ToAttrOrErr.takeError();
8667+
AI.importAttr(From, AI.importArg(From->getArg()).value());
87018668
break;
87028669
}
87038670
case attr::PtGuardedBy: {
87048671
const auto *From = cast<PtGuardedByAttr>(FromAttr);
8705-
AttrImporter AI(*this);
8706-
Expected<Attr *> ToAttrOrErr =
8707-
AI.createImportedAttr(From, AI.importArg(From->getArg()).value());
8708-
if (ToAttrOrErr)
8709-
ToAttr = *ToAttrOrErr;
8710-
else
8711-
return ToAttrOrErr.takeError();
8672+
AI.importAttr(From, AI.importArg(From->getArg()).value());
87128673
break;
87138674
}
87148675
case attr::AcquiredAfter: {
87158676
const auto *From = cast<AcquiredAfterAttr>(FromAttr);
8716-
AttrImporter AI(*this);
8717-
Expected<Attr *> ToAttrOrErr = AI.createImportedAttr(
8718-
From, AI.importArrayArg(From->args(), From->args_size()).value(),
8719-
From->args_size());
8720-
if (ToAttrOrErr)
8721-
ToAttr = *ToAttrOrErr;
8722-
else
8723-
return ToAttrOrErr.takeError();
8677+
AI.importAttr(From,
8678+
AI.importArrayArg(From->args(), From->args_size()).value(),
8679+
From->args_size());
87248680
break;
87258681
}
87268682
case attr::AcquiredBefore: {
87278683
const auto *From = cast<AcquiredBeforeAttr>(FromAttr);
8728-
AttrImporter AI(*this);
8729-
Expected<Attr *> ToAttrOrErr = AI.createImportedAttr(
8730-
From, AI.importArrayArg(From->args(), From->args_size()).value(),
8731-
From->args_size());
8732-
if (ToAttrOrErr)
8733-
ToAttr = *ToAttrOrErr;
8734-
else
8735-
return ToAttrOrErr.takeError();
8684+
AI.importAttr(From,
8685+
AI.importArrayArg(From->args(), From->args_size()).value(),
8686+
From->args_size());
87368687
break;
87378688
}
87388689
case attr::AssertExclusiveLock: {
87398690
const auto *From = cast<AssertExclusiveLockAttr>(FromAttr);
8740-
AttrImporter AI(*this);
8741-
Expected<Attr *> ToAttrOrErr = AI.createImportedAttr(
8742-
From, AI.importArrayArg(From->args(), From->args_size()).value(),
8743-
From->args_size());
8744-
if (ToAttrOrErr)
8745-
ToAttr = *ToAttrOrErr;
8746-
else
8747-
return ToAttrOrErr.takeError();
8691+
AI.importAttr(From,
8692+
AI.importArrayArg(From->args(), From->args_size()).value(),
8693+
From->args_size());
87488694
break;
87498695
}
87508696
case attr::AssertSharedLock: {
87518697
const auto *From = cast<AssertSharedLockAttr>(FromAttr);
8752-
AttrImporter AI(*this);
8753-
Expected<Attr *> ToAttrOrErr = AI.createImportedAttr(
8754-
From, AI.importArrayArg(From->args(), From->args_size()).value(),
8755-
From->args_size());
8756-
if (ToAttrOrErr)
8757-
ToAttr = *ToAttrOrErr;
8758-
else
8759-
return ToAttrOrErr.takeError();
8698+
AI.importAttr(From,
8699+
AI.importArrayArg(From->args(), From->args_size()).value(),
8700+
From->args_size());
87608701
break;
87618702
}
87628703
case attr::ExclusiveTrylockFunction: {
87638704
const auto *From = cast<ExclusiveTrylockFunctionAttr>(FromAttr);
8764-
AttrImporter AI(*this);
8765-
Expected<Attr *> ToAttrOrErr = AI.createImportedAttr(
8766-
From, AI.importArg(From->getSuccessValue()).value(),
8767-
AI.importArrayArg(From->args(), From->args_size()).value(),
8768-
From->args_size());
8769-
if (ToAttrOrErr)
8770-
ToAttr = *ToAttrOrErr;
8771-
else
8772-
return ToAttrOrErr.takeError();
8705+
AI.importAttr(From, AI.importArg(From->getSuccessValue()).value(),
8706+
AI.importArrayArg(From->args(), From->args_size()).value(),
8707+
From->args_size());
87738708
break;
87748709
}
87758710
case attr::SharedTrylockFunction: {
87768711
const auto *From = cast<SharedTrylockFunctionAttr>(FromAttr);
8777-
AttrImporter AI(*this);
8778-
Expected<Attr *> ToAttrOrErr = AI.createImportedAttr(
8779-
From, AI.importArg(From->getSuccessValue()).value(),
8780-
AI.importArrayArg(From->args(), From->args_size()).value(),
8781-
From->args_size());
8782-
if (ToAttrOrErr)
8783-
ToAttr = *ToAttrOrErr;
8784-
else
8785-
return ToAttrOrErr.takeError();
8712+
AI.importAttr(From, AI.importArg(From->getSuccessValue()).value(),
8713+
AI.importArrayArg(From->args(), From->args_size()).value(),
8714+
From->args_size());
87868715
break;
87878716
}
87888717
case attr::LockReturned: {
87898718
const auto *From = cast<LockReturnedAttr>(FromAttr);
8790-
AttrImporter AI(*this);
8791-
Expected<Attr *> ToAttrOrErr =
8792-
AI.createImportedAttr(From, AI.importArg(From->getArg()).value());
8793-
if (ToAttrOrErr)
8794-
ToAttr = *ToAttrOrErr;
8795-
else
8796-
return ToAttrOrErr.takeError();
8719+
AI.importAttr(From, AI.importArg(From->getArg()).value());
87978720
break;
87988721
}
87998722
case attr::LocksExcluded: {
88008723
const auto *From = cast<LocksExcludedAttr>(FromAttr);
8801-
AttrImporter AI(*this);
8802-
Expected<Attr *> ToAttrOrErr = AI.createImportedAttr(
8803-
From, AI.importArrayArg(From->args(), From->args_size()).value(),
8804-
From->args_size());
8805-
if (ToAttrOrErr)
8806-
ToAttr = *ToAttrOrErr;
8807-
else
8808-
return ToAttrOrErr.takeError();
8724+
AI.importAttr(From,
8725+
AI.importArrayArg(From->args(), From->args_size()).value(),
8726+
From->args_size());
88098727
break;
88108728
}
88118729

8812-
default:
8813-
// FIXME: 'clone' copies every member but some of them should be imported.
8814-
// Handle other Attrs that have parameters that should be imported.
8815-
ToAttr = FromAttr->clone(ToContext);
8816-
ToAttr->setRange(ToRange);
8730+
default: {
8731+
// The default branch works for attributes that have no arguments to import.
8732+
// FIXME: Handle every attribute type that has arguments of type to import
8733+
// (most often Expr* or Decl* or type) in the switch above.
8734+
AI.cloneAttr(FromAttr);
88178735
break;
88188736
}
8819-
assert(ToAttr && "Attribute should be created.");
8820-
8821-
return ToAttr;
8737+
}
8738+
8739+
return std::move(AI).getResult();
88228740
}
88238741

88248742
Decl *ASTImporter::GetAlreadyImportedOrNull(const Decl *FromD) const {

clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -114,10 +114,6 @@ const char *AMDGCN::OpenMPLinker::constructLLVMLinkCommand(
114114
}
115115
}
116116

117-
AddStaticDeviceLibsLinking(C, *this, JA, Inputs, Args, CmdArgs, "amdgcn",
118-
SubArchName,
119-
/* bitcode SDL?*/ true,
120-
/* PostClang Link? */ false);
121117
// Add an intermediate output file.
122118
CmdArgs.push_back("-o");
123119
const char *OutputFileName =

0 commit comments

Comments
 (0)