From 6a0a7dda76ecb614b3b2902a133dd5db8f139a1e Mon Sep 17 00:00:00 2001 From: Calum Grant <42069085+calumgrant@users.noreply.github.com> Date: Mon, 18 Nov 2024 10:31:04 +0000 Subject: [PATCH] Revert "Revert "C++: Do not generate IR for functions with multiple entry points"" --- .../raw/internal/TranslatedElement.qll | 2 + .../ir/multiple-entry-points/raw_ir.expected | 67 ------------------- 2 files changed, 2 insertions(+), 67 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll index 0f9bc370f7a5..8e7e46c94c62 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll @@ -196,6 +196,8 @@ private predicate isInvalidFunction(Function func) { expr.getEnclosingFunction() = func and not exists(expr.getType()) ) + or + count(func.getEntryPoint().getLocation()) > 1 } /** diff --git a/cpp/ql/test/library-tests/ir/multiple-entry-points/raw_ir.expected b/cpp/ql/test/library-tests/ir/multiple-entry-points/raw_ir.expected index 2ded282e8d35..e69de29bb2d1 100644 --- a/cpp/ql/test/library-tests/ir/multiple-entry-points/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/multiple-entry-points/raw_ir.expected @@ -1,67 +0,0 @@ -test1.cpp: -# 3| int foo(int) -# 3| Block 0 -# 3| v3_1(void) = EnterFunction : -test2.cpp: -# 1| v3_1(void) = EnterFunction : -test1.cpp: -# 3| mu3_2(unknown) = AliasedDefinition : -test2.cpp: -# 1| mu3_2(unknown) = AliasedDefinition : -test1.cpp: -# 3| mu3_3(unknown) = InitializeNonLocal : -test2.cpp: -# 1| mu3_3(unknown) = InitializeNonLocal : -test1.cpp: -# 3| r3_4(glval) = VariableAddress[i] : -test2.cpp: -# 1| r3_4(glval) = VariableAddress[i] : -test1.cpp: -# 3| mu3_5(int) = InitializeParameter[i] : &:r1_4, &:r3_4 -test2.cpp: -# 1| mu3_5(int) = InitializeParameter[i] : &:r1_4, &:r3_4 -#-----| Goto -> Block 2 -#-----| Goto -> Block 2 - -# 1| Block 0 -#-----| Goto -> Block 2 -#-----| Goto -> Block 2 - -test1.cpp: -# 3| Block 1 -# 3| r3_6(glval) = VariableAddress[#return] : -test2.cpp: -# 1| r3_6(glval) = VariableAddress[#return] : -test1.cpp: -# 3| v3_7(void) = ReturnValue : &:r1_6, &:r3_6, ~m? -test2.cpp: -# 1| v3_7(void) = ReturnValue : &:r1_6, &:r3_6, ~m? -test1.cpp: -# 3| v3_8(void) = AliasedUse : ~m? -test2.cpp: -# 1| v3_8(void) = AliasedUse : ~m? -test1.cpp: -# 3| v3_9(void) = ExitFunction : -test2.cpp: -# 1| v3_9(void) = ExitFunction : - -# 1| Block 1 - -test1.cpp: -# 4| Block 2 -# 4| r4_1(glval) = VariableAddress[#return] : -# 4| r4_2(int) = Constant[42] : -# 4| mu4_3(int) = Store[#return] : &:r4_1, r4_2 -#-----| Goto -> Block 1 -#-----| Goto -> Block 1 - -test2.cpp: -# 2| Block 2 -# 2| r2_1(glval) = VariableAddress[#return] : -# 2| r2_2(glval) = VariableAddress[i] : -# 2| r2_3(int) = Load[i] : &:r2_2, ~m? -# 2| mu2_4(int) = Store[#return] : &:r2_1, r2_3 -#-----| Goto -> Block 1 -#-----| Goto -> Block 1 - -# 1| int foo(int)