diff options
author | Stephen Kelly <steveire@gmail.com> | 2014-05-11 14:04:53 (GMT) |
---|---|---|
committer | Stephen Kelly <steveire@gmail.com> | 2014-07-01 22:09:38 (GMT) |
commit | 61ce6547424821710d0fbebf06b0eb411a630253 (patch) | |
tree | 157f3f2e3a30bdbda660a91c6c751f3dad7c1957 /Tests/RunCMake/TargetPropertyGeneratorExpressions/LinkImplementationCycle3.cmake | |
parent | bf5fc1d5829e7995c0941996b4a515cbd46d4e4e (diff) | |
download | CMake-61ce6547424821710d0fbebf06b0eb411a630253.zip CMake-61ce6547424821710d0fbebf06b0eb411a630253.tar.gz CMake-61ce6547424821710d0fbebf06b0eb411a630253.tar.bz2 |
Genex: Fix stack overflow in transitive property evaluation.
Commit v2.8.11~156^2~2 (Expand includes and defines transitively
in 'external' genexes., 2013-02-13) introduced a recursive loop
and a stack overflow during evaluation of a link implementation
which depends on a transitive property, such as
add_library(empty1 ...)
add_library(empty2 ...)
target_link_libraries(empty1
PRIVATE
$<$<STREQUAL:$<TARGET_PROPERTY:INCLUDE_DIRECTORIES>,/foo/bar>:empty2>
)
There is no use-case for code like that currently, but it should not
cause a stack overflow.
Avoid the recursion by reporting an error early if a case like this
is found.
Diffstat (limited to 'Tests/RunCMake/TargetPropertyGeneratorExpressions/LinkImplementationCycle3.cmake')
-rw-r--r-- | Tests/RunCMake/TargetPropertyGeneratorExpressions/LinkImplementationCycle3.cmake | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/Tests/RunCMake/TargetPropertyGeneratorExpressions/LinkImplementationCycle3.cmake b/Tests/RunCMake/TargetPropertyGeneratorExpressions/LinkImplementationCycle3.cmake new file mode 100644 index 0000000..0f921d4 --- /dev/null +++ b/Tests/RunCMake/TargetPropertyGeneratorExpressions/LinkImplementationCycle3.cmake @@ -0,0 +1,10 @@ + +add_library(empty1 empty.cpp) +add_library(empty2 empty.cpp) + +# This is OK, because evaluating the INCLUDE_DIRECTORIES is not affected by +# the content of the INTERFACE_LINK_LIBRARIES. +target_link_libraries(empty1 + INTERFACE + $<$<STREQUAL:$<TARGET_PROPERTY:INCLUDE_DIRECTORIES>,/foo/bar>:empty2> +) |