Skip to content

Commit 6385230

Browse files
SC llvm teamSC llvm team
authored andcommitted
Merged main:1a4b9b6f7339 into amd-gfx:31ed504cc6fe
Local branch amd-gfx 31ed504 Merged main:c718336c4cb1 into amd-gfx:1d8917372237 Remote branch main 1a4b9b6 [asan] Ensure __asan_register_elf_globals is called in COMDAT asan.module_ctor (llvm#67745)
2 parents 31ed504 + 1a4b9b6 commit 6385230

File tree

179 files changed

+1846
-1180
lines changed

Some content is hidden

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

179 files changed

+1846
-1180
lines changed

clang-tools-extra/clangd/IncludeCleaner.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ bool mayConsiderUnused(const Inclusion &Inc, ParsedAST &AST,
102102
// Headers without include guards have side effects and are not
103103
// self-contained, skip them.
104104
if (!AST.getPreprocessor().getHeaderSearchInfo().isFileMultipleIncludeGuarded(
105-
&FE->getFileEntry())) {
105+
*FE)) {
106106
dlog("{0} doesn't have header guard and will not be considered unused",
107107
FE->getName());
108108
return false;

clang-tools-extra/clangd/ParsedAST.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -499,8 +499,8 @@ ParsedAST::build(llvm::StringRef Filename, const ParseInputs &Inputs,
499499
// (The rest of HeaderFileInfo is not relevant for our purposes).
500500
if (Preamble && Preamble->MainIsIncludeGuarded) {
501501
const SourceManager &SM = Clang->getSourceManager();
502-
const FileEntry *MainFE = SM.getFileEntryForID(SM.getMainFileID());
503-
Clang->getPreprocessor().getHeaderSearchInfo().MarkFileIncludeOnce(MainFE);
502+
OptionalFileEntryRef MainFE = SM.getFileEntryRefForID(SM.getMainFileID());
503+
Clang->getPreprocessor().getHeaderSearchInfo().MarkFileIncludeOnce(*MainFE);
504504
}
505505

506506
// Set up ClangTidy. Must happen after BeginSourceFile() so ASTContext exists.

clang-tools-extra/clangd/Preamble.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,10 +122,10 @@ class CppFilePreambleCallbacks : public PreambleCallbacks {
122122
CapturedCtx.emplace(CI);
123123

124124
const SourceManager &SM = CI.getSourceManager();
125-
const FileEntry *MainFE = SM.getFileEntryForID(SM.getMainFileID());
125+
OptionalFileEntryRef MainFE = SM.getFileEntryRefForID(SM.getMainFileID());
126126
IsMainFileIncludeGuarded =
127127
CI.getPreprocessor().getHeaderSearchInfo().isFileMultipleIncludeGuarded(
128-
MainFE);
128+
*MainFE);
129129

130130
if (Stats) {
131131
const ASTContext &AST = CI.getASTContext();

clang-tools-extra/clangd/unittests/ParsedASTTests.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -465,10 +465,10 @@ std::string once(llvm::StringRef Code) {
465465

466466
bool mainIsGuarded(const ParsedAST &AST) {
467467
const auto &SM = AST.getSourceManager();
468-
const FileEntry *MainFE = SM.getFileEntryForID(SM.getMainFileID());
468+
OptionalFileEntryRef MainFE = SM.getFileEntryRefForID(SM.getMainFileID());
469469
return AST.getPreprocessor()
470470
.getHeaderSearchInfo()
471-
.isFileMultipleIncludeGuarded(MainFE);
471+
.isFileMultipleIncludeGuarded(*MainFE);
472472
}
473473

474474
MATCHER_P(diag, Desc, "") {

clang-tools-extra/include-cleaner/lib/Record.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -188,8 +188,8 @@ class PragmaIncludes::RecordPragma : public PPCallbacks, public CommentHandler {
188188
if (Reason == PPCallbacks::ExitFile) {
189189
// At file exit time HeaderSearchInfo is valid and can be used to
190190
// determine whether the file was a self-contained header or not.
191-
if (const FileEntry *FE = SM.getFileEntryForID(PrevFID)) {
192-
if (tooling::isSelfContainedHeader(FE, SM, HeaderInfo))
191+
if (OptionalFileEntryRef FE = SM.getFileEntryRefForID(PrevFID)) {
192+
if (tooling::isSelfContainedHeader(*FE, SM, HeaderInfo))
193193
Out->NonSelfContainedFiles.erase(FE->getUniqueID());
194194
else
195195
Out->NonSelfContainedFiles.insert(FE->getUniqueID());

clang/docs/ReleaseNotes.rst

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,8 @@ Bug Fixes in This Version
269269
- Fixes crash when trying to obtain the common sugared type of
270270
`decltype(instantiation-dependent-expr)`.
271271
Fixes (`#67603 <https://github.com/llvm/llvm-project/issues/67603>`_)
272+
- Fixes a crash caused by a multidimensional array being captured by a lambda
273+
(`#67722 <https://github.com/llvm/llvm-project/issues/67722>`_).
272274

273275
Bug Fixes to Compiler Builtins
274276
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -370,6 +372,9 @@ Bug Fixes to C++ Support
370372
argument. Fixes:
371373
(`#67395 <https://github.com/llvm/llvm-project/issues/67395>`_)
372374

375+
- Fixed a bug causing destructors of constant-evaluated structured bindings
376+
initialized by array elements to be called in the wrong evaluation context.
377+
373378
Bug Fixes to AST Handling
374379
^^^^^^^^^^^^^^^^^^^^^^^^^
375380
- Fixed an import failure of recursive friend class template.

clang/include/clang/AST/OpenMPClause.h

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9220,6 +9220,27 @@ class OMPXAttributeClause
92209220
}
92219221
};
92229222

9223+
/// This represents 'ompx_bare' clause in the '#pragma omp target teams ...'
9224+
/// directive.
9225+
///
9226+
/// \code
9227+
/// #pragma omp target teams ompx_bare
9228+
/// \endcode
9229+
/// In this example directive '#pragma omp target teams' has a 'ompx_bare'
9230+
/// clause.
9231+
class OMPXBareClause : public OMPNoChildClause<llvm::omp::OMPC_ompx_bare> {
9232+
public:
9233+
/// Build 'ompx_bare' clause.
9234+
///
9235+
/// \param StartLoc Starting location of the clause.
9236+
/// \param EndLoc Ending location of the clause.
9237+
OMPXBareClause(SourceLocation StartLoc, SourceLocation EndLoc)
9238+
: OMPNoChildClause(StartLoc, EndLoc) {}
9239+
9240+
/// Build an empty clause.
9241+
OMPXBareClause() = default;
9242+
};
9243+
92239244
} // namespace clang
92249245

92259246
#endif // LLVM_CLANG_AST_OPENMPCLAUSE_H

clang/include/clang/AST/RecursiveASTVisitor.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3890,6 +3890,11 @@ bool RecursiveASTVisitor<Derived>::VisitOMPXAttributeClause(
38903890
return true;
38913891
}
38923892

3893+
template <typename Derived>
3894+
bool RecursiveASTVisitor<Derived>::VisitOMPXBareClause(OMPXBareClause *C) {
3895+
return true;
3896+
}
3897+
38933898
// FIXME: look at the following tricky-seeming exprs to see if we
38943899
// need to recurse on anything. These are ones that have methods
38953900
// returning decls or qualtypes or nestednamespecifier -- though I'm

clang/include/clang/Basic/DiagnosticParseKinds.td

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1360,6 +1360,8 @@ def warn_clause_expected_string : Warning<
13601360
"expected string literal in 'clause %0' - ignoring">, InGroup<IgnoredPragmas>;
13611361
def err_omp_unexpected_clause : Error<
13621362
"unexpected OpenMP clause '%0' in directive '#pragma omp %1'">;
1363+
def err_omp_unexpected_clause_extension_only : Error<
1364+
"OpenMP clause '%0' is only available as extension, use '-fopenmp-extensions'">;
13631365
def err_omp_immediate_directive : Error<
13641366
"'#pragma omp %0' %select{|with '%2' clause }1cannot be an immediate substatement">;
13651367
def err_omp_expected_identifier_for_critical : Error<
@@ -1452,6 +1454,8 @@ def warn_unknown_declare_variant_isa_trait
14521454
"spelling or consider restricting the context selector with the "
14531455
"'arch' selector further">,
14541456
InGroup<SourceUsesOpenMP>;
1457+
def note_ompx_bare_clause : Note<
1458+
"OpenMP extension clause '%0' only allowed with '#pragma omp %1'">;
14551459
def note_omp_declare_variant_ctx_options
14561460
: Note<"context %select{set|selector|property}0 options are: %1">;
14571461
def warn_omp_declare_variant_expected

clang/include/clang/Basic/SourceManager.h

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -942,12 +942,12 @@ class SourceManager : public RefCountedBase<SourceManager> {
942942
///
943943
/// Returns std::nullopt if the buffer is not valid.
944944
std::optional<llvm::MemoryBufferRef>
945-
getMemoryBufferForFileOrNone(const FileEntry *File);
945+
getMemoryBufferForFileOrNone(FileEntryRef File);
946946

947947
/// Retrieve the memory buffer associated with the given file.
948948
///
949949
/// Returns a fake buffer if there isn't a real one.
950-
llvm::MemoryBufferRef getMemoryBufferForFileOrFake(const FileEntry *File) {
950+
llvm::MemoryBufferRef getMemoryBufferForFileOrFake(FileEntryRef File) {
951951
if (auto B = getMemoryBufferForFileOrNone(File))
952952
return *B;
953953
return getFakeBufferForRecovery();
@@ -960,7 +960,7 @@ class SourceManager : public RefCountedBase<SourceManager> {
960960
///
961961
/// \param Buffer the memory buffer whose contents will be used as the
962962
/// data in the given source file.
963-
void overrideFileContents(const FileEntry *SourceFile,
963+
void overrideFileContents(FileEntryRef SourceFile,
964964
const llvm::MemoryBufferRef &Buffer) {
965965
overrideFileContents(SourceFile, llvm::MemoryBuffer::getMemBuffer(Buffer));
966966
}
@@ -972,12 +972,8 @@ class SourceManager : public RefCountedBase<SourceManager> {
972972
///
973973
/// \param Buffer the memory buffer whose contents will be used as the
974974
/// data in the given source file.
975-
void overrideFileContents(const FileEntry *SourceFile,
976-
std::unique_ptr<llvm::MemoryBuffer> Buffer);
977975
void overrideFileContents(FileEntryRef SourceFile,
978-
std::unique_ptr<llvm::MemoryBuffer> Buffer) {
979-
overrideFileContents(&SourceFile.getFileEntry(), std::move(Buffer));
980-
}
976+
std::unique_ptr<llvm::MemoryBuffer> Buffer);
981977

982978
/// Override the given source file with another one.
983979
///

clang/include/clang/Lex/HeaderSearch.h

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ class ExternalHeaderFileInfoSource {
139139
/// \returns Header file information for the given file entry, with the
140140
/// \c External bit set. If the file entry is not known, return a
141141
/// default-constructed \c HeaderFileInfo.
142-
virtual HeaderFileInfo GetHeaderFileInfo(const FileEntry *FE) = 0;
142+
virtual HeaderFileInfo GetHeaderFileInfo(FileEntryRef FE) = 0;
143143
};
144144

145145
/// This structure is used to record entries in our framework cache.
@@ -487,7 +487,7 @@ class HeaderSearch {
487487
OptionalFileEntryRef LookupFile(
488488
StringRef Filename, SourceLocation IncludeLoc, bool isAngled,
489489
ConstSearchDirIterator FromDir, ConstSearchDirIterator *CurDir,
490-
ArrayRef<std::pair<const FileEntry *, DirectoryEntryRef>> Includers,
490+
ArrayRef<std::pair<OptionalFileEntryRef, DirectoryEntryRef>> Includers,
491491
SmallVectorImpl<char> *SearchPath, SmallVectorImpl<char> *RelativePath,
492492
Module *RequestingModule, ModuleMap::KnownHeader *SuggestedModule,
493493
bool *IsMapped, bool *IsFrameworkFound, bool SkipCache = false,
@@ -522,33 +522,32 @@ class HeaderSearch {
522522

523523
/// Return whether the specified file is a normal header,
524524
/// a system header, or a C++ friendly system header.
525-
SrcMgr::CharacteristicKind getFileDirFlavor(const FileEntry *File) {
525+
SrcMgr::CharacteristicKind getFileDirFlavor(FileEntryRef File) {
526526
return (SrcMgr::CharacteristicKind)getFileInfo(File).DirInfo;
527527
}
528528

529529
/// Mark the specified file as a "once only" file due to
530530
/// \#pragma once.
531-
void MarkFileIncludeOnce(const FileEntry *File) {
531+
void MarkFileIncludeOnce(FileEntryRef File) {
532532
HeaderFileInfo &FI = getFileInfo(File);
533533
FI.isPragmaOnce = true;
534534
}
535535

536536
/// Mark the specified file as a system header, e.g. due to
537537
/// \#pragma GCC system_header.
538-
void MarkFileSystemHeader(const FileEntry *File) {
538+
void MarkFileSystemHeader(FileEntryRef File) {
539539
getFileInfo(File).DirInfo = SrcMgr::C_System;
540540
}
541541

542542
/// Mark the specified file as part of a module.
543-
void MarkFileModuleHeader(const FileEntry *FE,
544-
ModuleMap::ModuleHeaderRole Role,
543+
void MarkFileModuleHeader(FileEntryRef FE, ModuleMap::ModuleHeaderRole Role,
545544
bool isCompilingModuleHeader);
546545

547546
/// Mark the specified file as having a controlling macro.
548547
///
549548
/// This is used by the multiple-include optimization to eliminate
550549
/// no-op \#includes.
551-
void SetFileControllingMacro(const FileEntry *File,
550+
void SetFileControllingMacro(FileEntryRef File,
552551
const IdentifierInfo *ControllingMacro) {
553552
getFileInfo(File).ControllingMacro = ControllingMacro;
554553
}
@@ -558,10 +557,10 @@ class HeaderSearch {
558557
/// macro.
559558
///
560559
/// This routine does not consider the effect of \#import
561-
bool isFileMultipleIncludeGuarded(const FileEntry *File) const;
560+
bool isFileMultipleIncludeGuarded(FileEntryRef File) const;
562561

563562
/// Determine whether the given file is known to have ever been \#imported.
564-
bool hasFileBeenImported(const FileEntry *File) const {
563+
bool hasFileBeenImported(FileEntryRef File) const {
565564
const HeaderFileInfo *FI = getExistingFileInfo(File);
566565
return FI && FI->isImport;
567566
}
@@ -806,13 +805,13 @@ class HeaderSearch {
806805

807806
/// Return the HeaderFileInfo structure for the specified FileEntry,
808807
/// in preparation for updating it in some way.
809-
HeaderFileInfo &getFileInfo(const FileEntry *FE);
808+
HeaderFileInfo &getFileInfo(FileEntryRef FE);
810809

811810
/// Return the HeaderFileInfo structure for the specified FileEntry,
812811
/// if it has ever been filled in.
813812
/// \param WantExternal Whether the caller wants purely-external header file
814813
/// info (where \p External is true).
815-
const HeaderFileInfo *getExistingFileInfo(const FileEntry *FE,
814+
const HeaderFileInfo *getExistingFileInfo(FileEntryRef FE,
816815
bool WantExternal = true) const;
817816

818817
SearchDirIterator search_dir_begin() { return {*this, 0}; }

clang/include/clang/Lex/Preprocessor.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1483,13 +1483,13 @@ class Preprocessor {
14831483

14841484
/// Mark the file as included.
14851485
/// Returns true if this is the first time the file was included.
1486-
bool markIncluded(const FileEntry *File) {
1486+
bool markIncluded(FileEntryRef File) {
14871487
HeaderInfo.getFileInfo(File);
14881488
return IncludedFiles.insert(File).second;
14891489
}
14901490

14911491
/// Return true if this header has already been included.
1492-
bool alreadyIncluded(const FileEntry *File) const {
1492+
bool alreadyIncluded(FileEntryRef File) const {
14931493
HeaderInfo.getFileInfo(File);
14941494
return IncludedFiles.count(File);
14951495
}
@@ -1935,8 +1935,8 @@ class Preprocessor {
19351935
/// (1-based).
19361936
///
19371937
/// \returns true if an error occurred, false otherwise.
1938-
bool SetCodeCompletionPoint(const FileEntry *File,
1939-
unsigned Line, unsigned Column);
1938+
bool SetCodeCompletionPoint(FileEntryRef File, unsigned Line,
1939+
unsigned Column);
19401940

19411941
/// Determine if we are performing code completion.
19421942
bool isCodeCompletionEnabled() const { return CodeCompletionFile != nullptr; }

clang/include/clang/Sema/Sema.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12448,6 +12448,10 @@ class Sema final {
1244812448
SourceLocation LParenLoc,
1244912449
SourceLocation EndLoc);
1245012450

12451+
/// Called on a well-formed 'ompx_bare' clause.
12452+
OMPClause *ActOnOpenMPXBareClause(SourceLocation StartLoc,
12453+
SourceLocation EndLoc);
12454+
1245112455
/// The kind of conversion being performed.
1245212456
enum CheckedConversionKind {
1245312457
/// An implicit conversion.

clang/include/clang/Serialization/ASTReader.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1821,7 +1821,7 @@ class ASTReader
18211821
SourceRange ReadSkippedRange(unsigned Index) override;
18221822

18231823
/// Read the header file information for the given file entry.
1824-
HeaderFileInfo GetHeaderFileInfo(const FileEntry *FE) override;
1824+
HeaderFileInfo GetHeaderFileInfo(FileEntryRef FE) override;
18251825

18261826
void ReadPragmaDiagnosticMappings(DiagnosticsEngine &Diag);
18271827

clang/include/clang/Tooling/Inclusions/HeaderAnalysis.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@
99
#ifndef LLVM_CLANG_TOOLING_INCLUSIONS_HEADER_ANALYSIS_H
1010
#define LLVM_CLANG_TOOLING_INCLUSIONS_HEADER_ANALYSIS_H
1111

12+
#include "clang/Basic/FileEntry.h"
1213
#include "llvm/ADT/StringRef.h"
1314
#include <optional>
1415

1516
namespace clang {
16-
class FileEntry;
1717
class SourceManager;
1818
class HeaderSearch;
1919

@@ -27,7 +27,7 @@ namespace tooling {
2727
///
2828
/// This function can be expensive as it may scan the source code to find out
2929
/// dont-include-me pattern heuristically.
30-
bool isSelfContainedHeader(const FileEntry *FE, const SourceManager &SM,
30+
bool isSelfContainedHeader(FileEntryRef FE, const SourceManager &SM,
3131
const HeaderSearch &HeaderInfo);
3232

3333
/// This scans the given source code to see if it contains #import(s).

clang/lib/AST/ExprConstant.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10969,6 +10969,16 @@ bool ArrayExprEvaluator::VisitArrayInitLoopExpr(const ArrayInitLoopExpr *E) {
1096910969

1097010970
bool Success = true;
1097110971
for (EvalInfo::ArrayInitLoopIndex Index(Info); Index != Elements; ++Index) {
10972+
// C++ [class.temporary]/5
10973+
// There are four contexts in which temporaries are destroyed at a different
10974+
// point than the end of the full-expression. [...] The second context is
10975+
// when a copy constructor is called to copy an element of an array while
10976+
// the entire array is copied [...]. In either case, if the constructor has
10977+
// one or more default arguments, the destruction of every temporary created
10978+
// in a default argument is sequenced before the construction of the next
10979+
// array element, if any.
10980+
FullExpressionRAII Scope(Info);
10981+
1097210982
if (!EvaluateInPlace(Result.getArrayInitializedElt(Index),
1097310983
Info, Subobject, E->getSubExpr()) ||
1097410984
!HandleLValueArrayAdjustment(Info, E, Subobject,
@@ -10977,6 +10987,9 @@ bool ArrayExprEvaluator::VisitArrayInitLoopExpr(const ArrayInitLoopExpr *E) {
1097710987
return false;
1097810988
Success = false;
1097910989
}
10990+
10991+
// Make sure we run the destructors too.
10992+
Scope.destroy();
1098010993
}
1098110994

1098210995
return Success;

clang/lib/AST/OpenMPClause.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,7 @@ const OMPClauseWithPreInit *OMPClauseWithPreInit::get(const OMPClause *C) {
170170
case OMPC_affinity:
171171
case OMPC_when:
172172
case OMPC_bind:
173+
case OMPC_ompx_bare:
173174
break;
174175
default:
175176
break;
@@ -2546,6 +2547,10 @@ void OMPClausePrinter::VisitOMPXAttributeClause(OMPXAttributeClause *Node) {
25462547
OS << ")";
25472548
}
25482549

2550+
void OMPClausePrinter::VisitOMPXBareClause(OMPXBareClause *Node) {
2551+
OS << "ompx_bare";
2552+
}
2553+
25492554
void OMPTraitInfo::getAsVariantMatchInfo(ASTContext &ASTCtx,
25502555
VariantMatchInfo &VMI) const {
25512556
for (const OMPTraitSet &Set : Sets) {

clang/lib/AST/StmtProfile.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -930,6 +930,7 @@ void OMPClauseProfiler::VisitOMPDoacrossClause(const OMPDoacrossClause *C) {
930930
}
931931
void OMPClauseProfiler::VisitOMPXAttributeClause(const OMPXAttributeClause *C) {
932932
}
933+
void OMPClauseProfiler::VisitOMPXBareClause(const OMPXBareClause *C) {}
933934
} // namespace
934935

935936
void

clang/lib/Basic/SourceManager.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -681,14 +681,14 @@ SourceManager::createExpansionLocImpl(const ExpansionInfo &Info,
681681
}
682682

683683
std::optional<llvm::MemoryBufferRef>
684-
SourceManager::getMemoryBufferForFileOrNone(const FileEntry *File) {
685-
SrcMgr::ContentCache &IR = getOrCreateContentCache(File->getLastRef());
684+
SourceManager::getMemoryBufferForFileOrNone(FileEntryRef File) {
685+
SrcMgr::ContentCache &IR = getOrCreateContentCache(File);
686686
return IR.getBufferOrNone(Diag, getFileManager(), SourceLocation());
687687
}
688688

689689
void SourceManager::overrideFileContents(
690-
const FileEntry *SourceFile, std::unique_ptr<llvm::MemoryBuffer> Buffer) {
691-
SrcMgr::ContentCache &IR = getOrCreateContentCache(SourceFile->getLastRef());
690+
FileEntryRef SourceFile, std::unique_ptr<llvm::MemoryBuffer> Buffer) {
691+
SrcMgr::ContentCache &IR = getOrCreateContentCache(SourceFile);
692692

693693
IR.setBuffer(std::move(Buffer));
694694
IR.BufferOverridden = true;

0 commit comments

Comments
 (0)