@@ -2779,9 +2779,11 @@ void CodeGenFunction::EmitTypeMetadataCodeForVCall(const CXXRecordDecl *RD,
2779
2779
}
2780
2780
}
2781
2781
2782
- void CodeGenFunction::ParseCFITypeCheckKind (CFITypeCheckKind TCK,
2783
- SanitizerKind::SanitizerOrdinal &M,
2784
- llvm::SanitizerStatKind &SSK) {
2782
+ std::pair<SanitizerKind::SanitizerOrdinal, llvm::SanitizerStatKind>
2783
+ CodeGenFunction::ParseCFITypeCheckKind (CFITypeCheckKind TCK) {
2784
+ SanitizerKind::SanitizerOrdinal M;
2785
+ llvm::SanitizerStatKind SSK;
2786
+
2785
2787
switch (TCK) {
2786
2788
case CFITCK_VCall:
2787
2789
M = SanitizerKind::SO_CFIVCall;
@@ -2807,6 +2809,8 @@ void CodeGenFunction::ParseCFITypeCheckKind(CFITypeCheckKind TCK,
2807
2809
case CFITCK_VMFCall:
2808
2810
llvm_unreachable (" unexpected sanitizer kind" );
2809
2811
}
2812
+
2813
+ return std::make_pair (M, SSK);
2810
2814
}
2811
2815
2812
2816
void CodeGenFunction::EmitVTablePtrCheckForCall (const CXXRecordDecl *RD,
@@ -2816,10 +2820,9 @@ void CodeGenFunction::EmitVTablePtrCheckForCall(const CXXRecordDecl *RD,
2816
2820
if (!SanOpts.has (SanitizerKind::CFICastStrict))
2817
2821
RD = LeastDerivedClassWithSameLayout (RD);
2818
2822
2819
- SanitizerKind::SanitizerOrdinal Ordinal;
2820
- llvm::SanitizerStatKind SSK;
2821
- ParseCFITypeCheckKind (TCK, Ordinal, SSK);
2823
+ auto [Ordinal, SSK] = ParseCFITypeCheckKind (TCK);
2822
2824
ApplyDebugLocation ApplyTrapDI (*this , SanitizerAnnotateDebugInfo (Ordinal));
2825
+
2823
2826
EmitVTablePtrCheck (RD, VTable, TCK, Loc);
2824
2827
}
2825
2828
@@ -2842,9 +2845,7 @@ void CodeGenFunction::EmitVTablePtrCheckForCast(QualType T, Address Derived,
2842
2845
if (!SanOpts.has (SanitizerKind::CFICastStrict))
2843
2846
ClassDecl = LeastDerivedClassWithSameLayout (ClassDecl);
2844
2847
2845
- SanitizerKind::SanitizerOrdinal Ordinal;
2846
- llvm::SanitizerStatKind SSK;
2847
- ParseCFITypeCheckKind (TCK, Ordinal, SSK);
2848
+ auto [Ordinal, SSK] = ParseCFITypeCheckKind (TCK);
2848
2849
ApplyDebugLocation ApplyTrapDI (*this , SanitizerAnnotateDebugInfo (Ordinal));
2849
2850
2850
2851
llvm::BasicBlock *ContBlock = nullptr ;
@@ -2881,9 +2882,7 @@ void CodeGenFunction::EmitVTablePtrCheck(const CXXRecordDecl *RD,
2881
2882
!CGM.HasHiddenLTOVisibility (RD))
2882
2883
return ;
2883
2884
2884
- SanitizerKind::SanitizerOrdinal M;
2885
- llvm::SanitizerStatKind SSK;
2886
- ParseCFITypeCheckKind (TCK, M, SSK);
2885
+ auto [M, SSK] = ParseCFITypeCheckKind (TCK);
2887
2886
switch (TCK) {
2888
2887
case CFITCK_VCall:
2889
2888
case CFITCK_NVCall:
0 commit comments