Skip to content

Commit 251b3d8

Browse files
SC llvm teamSC llvm team
SC llvm team
authored and
SC llvm team
committed
Merged main:19b664d35266 into amd-gfx:f205aef70eb5
Local branch amd-gfx f205aef Merged main:87e11ecbaec9 into amd-gfx:e761c8ea3c3a Remote branch main 19b664d [Coroutine][DebugInfo] Remove the memory attributes on coro-async-declaration.ll (NFC) (llvm#66088)
2 parents f205aef + 19b664d commit 251b3d8

19 files changed

+2785
-2584
lines changed

clang/include/clang/Basic/DiagnosticDriverKinds.td

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -674,6 +674,9 @@ def err_cc1_round_trip_mismatch : Error<
674674
def err_cc1_unbounded_vscale_min : Error<
675675
"minimum vscale must be an unsigned integer greater than 0">;
676676

677+
def err_drv_using_omit_rtti_component_without_no_rtti : Error<
678+
"-fexperimental-omit-vtable-rtti call only be used with -fno-rtti">;
679+
677680
def err_drv_ssp_missing_offset_argument : Error<
678681
"'%0' is used without '-mstack-protector-guard-offset', and there is no default">;
679682

clang/include/clang/Basic/LangOptions.def

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -450,6 +450,9 @@ LANGOPT(SpeculativeLoadHardening, 1, 0, "Speculative load hardening enabled")
450450
LANGOPT(RelativeCXXABIVTables, 1, 0,
451451
"Use an ABI-incompatible v-table layout that uses relative references")
452452

453+
LANGOPT(OmitVTableRTTI, 1, 0,
454+
"Use an ABI-incompatible v-table layout that omits the RTTI component")
455+
453456
LANGOPT(VScaleMin, 32, 0, "Minimum vscale value")
454457
LANGOPT(VScaleMax, 32, 0, "Maximum vscale value")
455458

clang/include/clang/Driver/Options.td

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2671,6 +2671,12 @@ def fno_experimental_relative_cxx_abi_vtables :
26712671
Group<f_clang_Group>, Visibility<[ClangOption, CC1Option]>,
26722672
HelpText<"Do not use the experimental C++ class ABI for classes with virtual tables">;
26732673

2674+
defm experimental_omit_vtable_rtti : BoolFOption<"experimental-omit-vtable-rtti",
2675+
LangOpts<"OmitVTableRTTI">, DefaultFalse,
2676+
PosFlag<SetTrue, [], [CC1Option], "Omit">,
2677+
NegFlag<SetFalse, [], [CC1Option], "Do not omit">,
2678+
BothFlags<[], [CC1Option], " the RTTI component from virtual tables">>;
2679+
26742680
def fcxx_abi_EQ : Joined<["-"], "fc++-abi=">,
26752681
Group<f_clang_Group>, Visibility<[ClangOption, CC1Option]>,
26762682
HelpText<"C++ ABI to use. This will override the target C++ ABI.">;

clang/lib/AST/VTableBuilder.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -665,7 +665,11 @@ CharUnits VCallAndVBaseOffsetBuilder::getCurrentOffsetOffset() const {
665665
// vtable address point. (We subtract 3 to account for the information just
666666
// above the address point, the RTTI info, the offset to top, and the
667667
// vcall offset itself).
668-
int64_t OffsetIndex = -(int64_t)(3 + Components.size());
668+
size_t NumComponentsAboveAddrPoint = 3;
669+
if (Context.getLangOpts().OmitVTableRTTI)
670+
NumComponentsAboveAddrPoint--;
671+
int64_t OffsetIndex =
672+
-(int64_t)(NumComponentsAboveAddrPoint + Components.size());
669673

670674
// Under the relative ABI, the offset widths are 32-bit ints instead of
671675
// pointer widths.
@@ -1669,7 +1673,8 @@ void ItaniumVTableBuilder::LayoutPrimaryAndSecondaryVTables(
16691673
Components.push_back(VTableComponent::MakeOffsetToTop(OffsetToTop));
16701674

16711675
// Next, add the RTTI.
1672-
Components.push_back(VTableComponent::MakeRTTI(MostDerivedClass));
1676+
if (!Context.getLangOpts().OmitVTableRTTI)
1677+
Components.push_back(VTableComponent::MakeRTTI(MostDerivedClass));
16731678

16741679
uint64_t AddressPoint = Components.size();
16751680

clang/lib/Analysis/RetainSummaryManager.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -371,8 +371,9 @@ const RetainSummary *RetainSummaryManager::getSummaryForObjCOrCFObject(
371371
return getPersistentSummary(RetEffect::MakeNoRet(),
372372
ScratchArgs,
373373
ArgEffect(DoNothing), ArgEffect(DoNothing));
374-
} else if (FName == "VTCompressionSessionEncodeFrame") {
375-
// The context argument passed to VTCompressionSessionEncodeFrame()
374+
} else if (FName == "VTCompressionSessionEncodeFrame" ||
375+
FName == "VTCompressionSessionEncodeMultiImageFrame") {
376+
// The context argument passed to VTCompressionSessionEncodeFrame() et.al.
376377
// is passed to the callback specified when creating the session
377378
// (e.g. with VTCompressionSessionCreate()) which can release it.
378379
// To account for this possibility, conservatively stop tracking

clang/lib/Driver/ToolChains/Clang.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5526,6 +5526,9 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
55265526
Args.AddLastArg(CmdArgs, options::OPT_fexperimental_relative_cxx_abi_vtables,
55275527
options::OPT_fno_experimental_relative_cxx_abi_vtables);
55285528

5529+
Args.AddLastArg(CmdArgs, options::OPT_fexperimental_omit_vtable_rtti,
5530+
options::OPT_fno_experimental_omit_vtable_rtti);
5531+
55295532
// Handle segmented stacks.
55305533
Args.addOptInFlag(CmdArgs, options::OPT_fsplit_stack,
55315534
options::OPT_fno_split_stack);
@@ -6007,6 +6010,9 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
60076010
Args.AddLastArg(CmdArgs, options::OPT_fexperimental_relative_cxx_abi_vtables,
60086011
options::OPT_fno_experimental_relative_cxx_abi_vtables);
60096012

6013+
Args.AddLastArg(CmdArgs, options::OPT_fexperimental_omit_vtable_rtti,
6014+
options::OPT_fno_experimental_omit_vtable_rtti);
6015+
60106016
if (Arg *A = Args.getLastArg(options::OPT_ffuchsia_api_level_EQ))
60116017
A->render(Args, CmdArgs);
60126018

clang/lib/Frontend/CompilerInvocation.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4109,6 +4109,14 @@ bool CompilerInvocation::ParseLangArgs(LangOptions &Opts, ArgList &Args,
41094109
options::OPT_fno_experimental_relative_cxx_abi_vtables,
41104110
TargetCXXABI::usesRelativeVTables(T));
41114111

4112+
// RTTI is on by default.
4113+
bool HasRTTI = Args.hasFlag(options::OPT_frtti, options::OPT_fno_rtti, true);
4114+
Opts.OmitVTableRTTI =
4115+
Args.hasFlag(options::OPT_fexperimental_omit_vtable_rtti,
4116+
options::OPT_fno_experimental_omit_vtable_rtti, false);
4117+
if (Opts.OmitVTableRTTI && HasRTTI)
4118+
Diags.Report(diag::err_drv_using_omit_rtti_component_without_no_rtti);
4119+
41124120
for (const auto &A : Args.getAllArgValues(OPT_fmacro_prefix_map_EQ)) {
41134121
auto Split = StringRef(A).split('=');
41144122
Opts.MacroPrefixMap.insert(

0 commit comments

Comments
 (0)