@@ -1300,14 +1300,22 @@ ModuleAddressSanitizerPass::ModuleAddressSanitizerPass(
1300
1300
UseOdrIndicator(UseOdrIndicator), DestructorKind(DestructorKind) {}
1301
1301
1302
1302
PreservedAnalyses ModuleAddressSanitizerPass::run (Module &M,
1303
- AnalysisManager<Module> &AM) {
1304
- GlobalsMetadata &GlobalsMD = AM.getResult <ASanGlobalsMetadataAnalysis>(M);
1305
- ModuleAddressSanitizer Sanitizer (M, &GlobalsMD, Options.CompileKernel ,
1306
- Options.Recover , UseGlobalGC,
1307
- UseOdrIndicator, DestructorKind);
1308
- if (Sanitizer.instrumentModule (M))
1309
- return PreservedAnalyses::none ();
1310
- return PreservedAnalyses::all ();
1303
+ ModuleAnalysisManager &MAM) {
1304
+ GlobalsMetadata &GlobalsMD = MAM.getResult <ASanGlobalsMetadataAnalysis>(M);
1305
+ ModuleAddressSanitizer ModuleSanitizer (M, &GlobalsMD, Options.CompileKernel ,
1306
+ Options.Recover , UseGlobalGC,
1307
+ UseOdrIndicator, DestructorKind);
1308
+ bool Modified = false ;
1309
+ auto &FAM = MAM.getResult <FunctionAnalysisManagerModuleProxy>(M).getManager ();
1310
+ for (Function &F : M) {
1311
+ AddressSanitizer FunctionSanitizer (M, &GlobalsMD, Options.CompileKernel ,
1312
+ Options.Recover , Options.UseAfterScope ,
1313
+ Options.UseAfterReturn );
1314
+ const TargetLibraryInfo &TLI = FAM.getResult <TargetLibraryAnalysis>(F);
1315
+ Modified |= FunctionSanitizer.instrumentFunction (F, &TLI);
1316
+ }
1317
+ Modified |= ModuleSanitizer.instrumentModule (M);
1318
+ return Modified ? PreservedAnalyses::none () : PreservedAnalyses::all ();
1311
1319
}
1312
1320
1313
1321
INITIALIZE_PASS (ASanGlobalsMetadataWrapperPass, " asan-globals-md" ,
@@ -2841,6 +2849,8 @@ bool AddressSanitizer::suppressInstrumentationSiteForDebug(int &Instrumented) {
2841
2849
2842
2850
bool AddressSanitizer::instrumentFunction (Function &F,
2843
2851
const TargetLibraryInfo *TLI) {
2852
+ if (F.empty ())
2853
+ return false ;
2844
2854
if (F.getLinkage () == GlobalValue::AvailableExternallyLinkage) return false ;
2845
2855
if (!ClDebugFunc.empty () && ClDebugFunc == F.getName ()) return false ;
2846
2856
if (F.getName ().startswith (" __asan_" )) return false ;
0 commit comments