Skip to content

Commit 4431265

Browse files
committed
[clang] TargetInfo does not own TargetOptions
1 parent 77148fc commit 4431265

21 files changed

+30
-28
lines changed

clang-tools-extra/clangd/SystemIncludeExtractor.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,7 @@ bool isValidTarget(llvm::StringRef Triple) {
256256
DiagnosticsEngine Diags(new DiagnosticIDs, new DiagnosticOptions,
257257
new IgnoringDiagConsumer);
258258
llvm::IntrusiveRefCntPtr<TargetInfo> Target =
259-
TargetInfo::CreateTargetInfo(Diags, TargetOpts);
259+
TargetInfo::CreateTargetInfo(Diags, *TargetOpts);
260260
return bool(Target);
261261
}
262262

clang-tools-extra/modularize/ModularizeUtilities.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ ModularizeUtilities::ModularizeUtilities(std::vector<std::string> &InputPaths,
5353
Diagnostics(
5454
new DiagnosticsEngine(DiagIDs, DiagnosticOpts.get(), &DC, false)),
5555
TargetOpts(new ModuleMapTargetOptions()),
56-
Target(TargetInfo::CreateTargetInfo(*Diagnostics, TargetOpts)),
56+
Target(TargetInfo::CreateTargetInfo(*Diagnostics, *TargetOpts)),
5757
FileMgr(new FileManager(FileSystemOpts)),
5858
SourceMgr(new SourceManager(*Diagnostics, *FileMgr, false)), HSOpts(),
5959
HeaderInfo(new HeaderSearch(HSOpts, *SourceMgr, *Diagnostics, *LangOpts,

clang/include/clang/Basic/TargetInfo.h

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ enum OpenCLTypeKind : uint8_t {
224224
///
225225
class TargetInfo : public TransferrableTargetInfo,
226226
public RefCountedBase<TargetInfo> {
227-
std::shared_ptr<TargetOptions> TargetOpts;
227+
TargetOptions *TargetOpts;
228228
llvm::Triple Triple;
229229
protected:
230230
// Target values set by the ctor of the actual target implementation. Default
@@ -311,9 +311,8 @@ class TargetInfo : public TransferrableTargetInfo,
311311
/// \param Opts - The options to use to initialize the target. The target may
312312
/// modify the options to canonicalize the target feature information to match
313313
/// what the backend expects.
314-
static TargetInfo *
315-
CreateTargetInfo(DiagnosticsEngine &Diags,
316-
const std::shared_ptr<TargetOptions> &Opts);
314+
static TargetInfo *CreateTargetInfo(DiagnosticsEngine &Diags,
315+
TargetOptions &Opts);
317316

318317
virtual ~TargetInfo();
319318

clang/include/clang/Frontend/CompilerInstance.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,9 @@ class CompilerInstance : public ModuleLoader {
8888
/// The target being compiled for.
8989
IntrusiveRefCntPtr<TargetInfo> Target;
9090

91+
/// Options for the auxiliary target.
92+
std::unique_ptr<TargetOptions> AuxTargetOpts;
93+
9194
/// Auxiliary Target info.
9295
IntrusiveRefCntPtr<TargetInfo> AuxTarget;
9396

clang/lib/Basic/Targets.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -774,9 +774,10 @@ std::unique_ptr<TargetInfo> AllocateTarget(const llvm::Triple &Triple,
774774
using namespace clang::targets;
775775
/// CreateTargetInfo - Return the target info object for the specified target
776776
/// options.
777-
TargetInfo *
778-
TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags,
779-
const std::shared_ptr<TargetOptions> &Opts) {
777+
TargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags,
778+
TargetOptions &OptsRef) {
779+
TargetOptions *Opts = &OptsRef;
780+
780781
llvm::Triple Triple(llvm::Triple::normalize(Opts->Triple));
781782

782783
// Construct the target

clang/lib/Frontend/ASTUnit.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -615,7 +615,7 @@ class ASTInfoCollector : public ASTReaderListener {
615615

616616
this->TargetOpts = std::make_shared<TargetOptions>(TargetOpts);
617617
Target =
618-
TargetInfo::CreateTargetInfo(PP.getDiagnostics(), this->TargetOpts);
618+
TargetInfo::CreateTargetInfo(PP.getDiagnostics(), *this->TargetOpts);
619619

620620
updated();
621621
return false;

clang/lib/Frontend/ChainedIncludesSource.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ IntrusiveRefCntPtr<ExternalSemaSource> clang::createChainedIncludesSource(
127127
Clang->setInvocation(std::move(CInvok));
128128
Clang->setDiagnostics(Diags.get());
129129
Clang->setTarget(TargetInfo::CreateTargetInfo(
130-
Clang->getDiagnostics(), Clang->getInvocation().TargetOpts));
130+
Clang->getDiagnostics(), Clang->getInvocation().getTargetOpts()));
131131
Clang->createFileManager();
132132
Clang->createSourceManager(Clang->getFileManager());
133133
Clang->createPreprocessor(TU_Prefix);

clang/lib/Frontend/CompilerInstance.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ void CompilerInstance::setAuxTarget(TargetInfo *Value) { AuxTarget = Value; }
110110
bool CompilerInstance::createTarget() {
111111
// Create the target instance.
112112
setTarget(TargetInfo::CreateTargetInfo(getDiagnostics(),
113-
getInvocation().TargetOpts));
113+
getInvocation().getTargetOpts()));
114114
if (!hasTarget())
115115
return false;
116116

@@ -119,14 +119,14 @@ bool CompilerInstance::createTarget() {
119119
if (!getAuxTarget() &&
120120
(getLangOpts().CUDA || getLangOpts().isTargetDevice()) &&
121121
!getFrontendOpts().AuxTriple.empty()) {
122-
auto TO = std::make_shared<TargetOptions>();
122+
auto &TO = AuxTargetOpts = std::make_unique<TargetOptions>();
123123
TO->Triple = llvm::Triple::normalize(getFrontendOpts().AuxTriple);
124124
if (getFrontendOpts().AuxTargetCPU)
125125
TO->CPU = *getFrontendOpts().AuxTargetCPU;
126126
if (getFrontendOpts().AuxTargetFeatures)
127127
TO->FeaturesAsWritten = *getFrontendOpts().AuxTargetFeatures;
128128
TO->HostTriple = getTarget().getTriple().str();
129-
setAuxTarget(TargetInfo::CreateTargetInfo(getDiagnostics(), TO));
129+
setAuxTarget(TargetInfo::CreateTargetInfo(getDiagnostics(), *TO));
130130
}
131131

132132
if (!getTarget().hasStrictFP() && !getLangOpts().ExpStrictFP) {

clang/lib/Interpreter/Interpreter.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ CreateCI(const llvm::opt::ArgStringList &Argv) {
125125
Clang->getPreprocessorOpts().addRemappedFile("<<< inputs >>>", MB);
126126

127127
Clang->setTarget(TargetInfo::CreateTargetInfo(
128-
Clang->getDiagnostics(), Clang->getInvocation().TargetOpts));
128+
Clang->getDiagnostics(), Clang->getInvocation().getTargetOpts()));
129129
if (!Clang->hasTarget())
130130
return llvm::createStringError(llvm::errc::not_supported,
131131
"Initialization failed. "

clang/tools/clang-import-test/clang-import-test.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ std::unique_ptr<CompilerInstance> BuildCompilerInstance() {
208208
Ins->setInvocation(std::move(Inv));
209209

210210
TargetInfo *TI = TargetInfo::CreateTargetInfo(
211-
Ins->getDiagnostics(), Ins->getInvocation().TargetOpts);
211+
Ins->getDiagnostics(), Ins->getInvocation().getTargetOpts());
212212
Ins->setTarget(TI);
213213
Ins->getTarget().adjust(Ins->getDiagnostics(), Ins->getLangOpts());
214214
Ins->createFileManager();

0 commit comments

Comments
 (0)