diff options
author | Brad King <brad.king@kitware.com> | 2017-07-14 17:52:53 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2017-07-14 18:05:22 (GMT) |
commit | d89e10cd58e5f9e21cbd466e56a1890e2811bee0 (patch) | |
tree | d9e50fe357e872e38c14f78a1cbab2ad7cc8dc66 /Source/cmGeneratorTarget.h | |
parent | 25b72e9097260d1faf254155a1199886c808a58f (diff) | |
download | CMake-d89e10cd58e5f9e21cbd466e56a1890e2811bee0.zip CMake-d89e10cd58e5f9e21cbd466e56a1890e2811bee0.tar.gz CMake-d89e10cd58e5f9e21cbd466e56a1890e2811bee0.tar.bz2 |
Diagnose object library self-reference
The code
add_library(A OBJECT a.c)
target_sources(A PRIVATE $<TARGET_OBJECTS:A>)
used to crash CMake via infinite recursion while evaluating the
generator expression. Then the change in commit v3.9.0-rc1~266^2~1
(cmGeneratorTarget: Replace source classifier implementation,
2017-04-07) avoided the infinite recursion because GetKindedSources now
creates a map entry and initializes it once. If it is called again on
the same target during that initialization, the partially computed
results are returned. This is still wrong but does not crash.
Detect and diagnose this case instead.
Co-Author: Ben Boeckel <ben.boeckel@kitware.com>
Fixes: #16578
Diffstat (limited to 'Source/cmGeneratorTarget.h')
-rw-r--r-- | Source/cmGeneratorTarget.h | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/Source/cmGeneratorTarget.h b/Source/cmGeneratorTarget.h index c04d62b..52147e3 100644 --- a/Source/cmGeneratorTarget.h +++ b/Source/cmGeneratorTarget.h @@ -107,6 +107,11 @@ public: std::set<std::string> ExpectedResxHeaders; std::set<std::string> ExpectedXamlHeaders; std::set<std::string> ExpectedXamlSources; + bool Initialized; + KindedSources() + : Initialized(false) + { + } }; /** Get all sources needed for a configuration with kinds assigned. */ |