@@ -41,7 +41,33 @@ TEST(LLVMBasedICFGTest, StaticCallSite_1) {
4141 }
4242}
4343
44- TEST (LLVMBasedICFGTest, StaticCallSite_2) {
44+ TEST (LLVMBasedICFGTest, StaticCallSite_2a) {
45+ ProjectIRDB IRDB (
46+ {unittest::PathToLLTestFiles + " call_graphs/static_callsite_2_c.ll" },
47+ IRDBOptions::WPA);
48+ LLVMTypeHierarchy TH (IRDB);
49+ LLVMPointsToSet PT (IRDB);
50+ LLVMBasedICFG ICFG (IRDB, CallGraphAnalysisType::CHA, {" main" }, &TH, &PT, Soundness::Soundy, false );
51+ const llvm::Function *F = IRDB.getFunctionDefinition (" main" );
52+ const llvm::Function *FOO = IRDB.getFunctionDefinition (" foo" );
53+ const llvm::Function *BAR = IRDB.getFunctionDefinition (" bar" );
54+ ASSERT_TRUE (F);
55+ ASSERT_TRUE (FOO);
56+ ASSERT_TRUE (BAR);
57+
58+ set<const llvm::Function *> FunctionSet;
59+ FunctionSet.insert (F);
60+ FunctionSet.insert (FOO);
61+ FunctionSet.insert (BAR);
62+
63+ set<const llvm::Function *> FunSet = ICFG.getAllFunctions ();
64+ ASSERT_EQ (FunctionSet, FunSet);
65+
66+ set<const llvm::Instruction *> CallsFromWithin = ICFG.getCallsFromWithin (F);
67+ ASSERT_EQ (CallsFromWithin.size (), 2U );
68+ }
69+
70+ TEST (LLVMBasedICFGTest, StaticCallSite_2b) {
4571 ProjectIRDB IRDB (
4672 {unittest::PathToLLTestFiles + " call_graphs/static_callsite_2_c.ll" },
4773 IRDBOptions::WPA);
@@ -51,14 +77,20 @@ TEST(LLVMBasedICFGTest, StaticCallSite_2) {
5177 const llvm::Function *F = IRDB.getFunctionDefinition (" main" );
5278 const llvm::Function *FOO = IRDB.getFunctionDefinition (" foo" );
5379 const llvm::Function *BAR = IRDB.getFunctionDefinition (" bar" );
80+ const llvm::Function *CTOR = IRDB.getFunctionDefinition (" __psrCRuntimeGlobalCtorsModel" );
81+ const llvm::Function *DTOR = IRDB.getFunctionDefinition (" __psrCRuntimeGlobalDtorsModel" );
5482 ASSERT_TRUE (F);
5583 ASSERT_TRUE (FOO);
5684 ASSERT_TRUE (BAR);
85+ ASSERT_TRUE (CTOR);
86+ ASSERT_TRUE (DTOR);
5787
5888 set<const llvm::Function *> FunctionSet;
5989 FunctionSet.insert (F);
6090 FunctionSet.insert (FOO);
6191 FunctionSet.insert (BAR);
92+ FunctionSet.insert (CTOR);
93+ FunctionSet.insert (DTOR);
6294
6395 set<const llvm::Function *> FunSet = ICFG.getAllFunctions ();
6496 ASSERT_EQ (FunctionSet, FunSet);
@@ -232,7 +264,7 @@ TEST(LLVMBasedICFGTest, StaticCallSite_7) {
232264 getLastInstructionOf (IRDB.getFunctionDefinition (" _ZN3Foo1fEv" ));
233265 set<const llvm::Function *> AllMethods = ICFG.getAllFunctions ();
234266 ASSERT_EQ (LastInst, I);
235- ASSERT_EQ (AllMethods.size (), 3U );
267+ ASSERT_EQ (AllMethods.size (), 5U );
236268 ASSERT_TRUE (AllMethods.count (Main));
237269 ASSERT_TRUE (AllMethods.count (FooF));
238270 ASSERT_TRUE (AllMethods.count (F));
@@ -257,7 +289,7 @@ TEST(LLVMBasedICFGTest, StaticCallSite_8) {
257289 ASSERT_EQ (Insts.size (), Insts1.size ());
258290
259291 set<const llvm::Function *> FunSet = ICFG.getAllFunctions ();
260- ASSERT_EQ (FunSet.size (), 3U );
292+ ASSERT_EQ (FunSet.size (), 5U );
261293
262294 const llvm::Instruction *I = getNthInstruction (F, 1 );
263295 ASSERT_TRUE (ICFG.isStartPoint (I));
0 commit comments