@@ -2779,9 +2779,11 @@ void CodeGenFunction::EmitTypeMetadataCodeForVCall(const CXXRecordDecl *RD,
27792779 }
27802780}
27812781
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+
27852787 switch (TCK) {
27862788 case CFITCK_VCall:
27872789 M = SanitizerKind::SO_CFIVCall;
@@ -2807,6 +2809,8 @@ void CodeGenFunction::ParseCFITypeCheckKind(CFITypeCheckKind TCK,
28072809 case CFITCK_VMFCall:
28082810 llvm_unreachable (" unexpected sanitizer kind" );
28092811 }
2812+
2813+ return std::make_pair (M, SSK);
28102814}
28112815
28122816void CodeGenFunction::EmitVTablePtrCheckForCall (const CXXRecordDecl *RD,
@@ -2816,10 +2820,9 @@ void CodeGenFunction::EmitVTablePtrCheckForCall(const CXXRecordDecl *RD,
28162820 if (!SanOpts.has (SanitizerKind::CFICastStrict))
28172821 RD = LeastDerivedClassWithSameLayout (RD);
28182822
2819- SanitizerKind::SanitizerOrdinal Ordinal;
2820- llvm::SanitizerStatKind SSK;
2821- ParseCFITypeCheckKind (TCK, Ordinal, SSK);
2823+ auto [Ordinal, SSK] = ParseCFITypeCheckKind (TCK);
28222824 ApplyDebugLocation ApplyTrapDI (*this , SanitizerAnnotateDebugInfo (Ordinal));
2825+
28232826 EmitVTablePtrCheck (RD, VTable, TCK, Loc);
28242827}
28252828
@@ -2842,9 +2845,7 @@ void CodeGenFunction::EmitVTablePtrCheckForCast(QualType T, Address Derived,
28422845 if (!SanOpts.has (SanitizerKind::CFICastStrict))
28432846 ClassDecl = LeastDerivedClassWithSameLayout (ClassDecl);
28442847
2845- SanitizerKind::SanitizerOrdinal Ordinal;
2846- llvm::SanitizerStatKind SSK;
2847- ParseCFITypeCheckKind (TCK, Ordinal, SSK);
2848+ auto [Ordinal, SSK] = ParseCFITypeCheckKind (TCK);
28482849 ApplyDebugLocation ApplyTrapDI (*this , SanitizerAnnotateDebugInfo (Ordinal));
28492850
28502851 llvm::BasicBlock *ContBlock = nullptr ;
@@ -2881,9 +2882,7 @@ void CodeGenFunction::EmitVTablePtrCheck(const CXXRecordDecl *RD,
28812882 !CGM.HasHiddenLTOVisibility (RD))
28822883 return ;
28832884
2884- SanitizerKind::SanitizerOrdinal M;
2885- llvm::SanitizerStatKind SSK;
2886- ParseCFITypeCheckKind (TCK, M, SSK);
2885+ auto [M, SSK] = ParseCFITypeCheckKind (TCK);
28872886 switch (TCK) {
28882887 case CFITCK_VCall:
28892888 case CFITCK_NVCall:
0 commit comments