Merge pull request #18004 from github/revert-17948-revert-17694-multiple-entry-point

Revert "Revert "C++: Do not generate IR for functions with multiple entry points""
This commit is contained in:
Calum Grant 2024-11-19 09:20:24 +00:00 коммит произвёл GitHub
Родитель 99494dd540 6a0a7dda76
Коммит 2bfd7326d9
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: B5690EEEBB952194
2 изменённых файлов: 2 добавлений и 67 удалений

Просмотреть файл

@ -196,6 +196,8 @@ private predicate isInvalidFunction(Function func) {
expr.getEnclosingFunction() = func and
not exists(expr.getType())
)
or
count(func.getEntryPoint().getLocation()) > 1
}
/**

Просмотреть файл

@ -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<int>) = VariableAddress[i] :
test2.cpp:
# 1| r3_4(glval<int>) = 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<int>) = VariableAddress[#return] :
test2.cpp:
# 1| r3_6(glval<int>) = 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<int>) = 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<int>) = VariableAddress[#return] :
# 2| r2_2(glval<int>) = 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)