[PATCH] Explicitly specify CMake MSVC stack size

Greg_Bedwell at sn.scee.net Greg_Bedwell at sn.scee.net
Tue Sep 24 07:32:46 PDT 2013


Hi,

This is my first attempt at submitting a patch, so please go easy on me 
:-).

I recently upgraded our version of CMake to 2.8.11.2 and was surprised to 
find that one of our test suites showed a new crash in our MSVC-built 
clang.  Debugging showed that it was caused by clang overflowing the 
Windows stack.  I eventually tracked it down to a change to resolve the 
following issue in CMake:
http://www.gccxml.org/Bug/view.php?id=12437 [Default link line includes 
massive stack size of 10M with the /STACK:10000000 option ]

The effect of this change in CMake is to reduce the Windows stack size for 
CMake built executables from ~10MB to the default value of 1MB.  I've only 
seen this cause an issue in clang when parsing recursive templates so I've 
included a clang test, but in theory could affect any tool built in the 
LLVM tree so my fix is in the top-level LLVM CMake file.  My fix 
explicitly sets the previous 10000000 bytes value in order to maintain 
consistent behaviour between builds using different versions of CMake.

Unfortunately, due to a bug in previous versions of CMake ( 
http://www.cmake.org/Bug/view.php?id=13968 ), specifying 
CMAKE_CXX_STACK_SIZE results in a link error of missing "10000000.obj" so 
I've had to guard my change against the version of CMake being greater 
than or equal to 2.8.11.  My idea is that at some point in the future we 
may set the minimum version of CMake to at least 2.8.11 in which case we 
could consider finding a more appropriate value for CMAKE_CXX_STACK_SIZE 
but for now I think keeping consistency is important (i.e. if the process 
stack size changes, it should be traceable to a specific revision where a 
value was changed, rather than some change external to the LLVM/Clang 
trees such as differing versions of CMake being used).

Without this fix, the attached test will crash due to a stack overflow, 
when generating the project with CMake 2.8.11 (on VS2010 x64 at least) and 
will pass when the project is generated with earlier versions of CMake.  I 
have a slight concern that the test may cause issues for any hosts we 
support with smaller default stacks.  If this is a real problem then a 
test may not be appropriate in this case.



I appreciate any feedback you may have.  Please commit for me if you are 
happy with the change.

Thanks,

--
Greg Bedwell
SN Systems - Sony Computer Entertainment Group
http://www.snsys.com




**********************************************************************
This email and any files transmitted with it are confidential and intended 
solely for the use of the individual or entity to whom they are addressed. 
If you have received this email in error please notify postmaster at scee.net
This footnote also confirms that this email message has been checked for 
all known viruses.
Sony Computer Entertainment Europe Limited
Registered Office: 10 Great Marlborough Street, London W1F 7LP, United 
Kingdom
Registered in England: 3277793
**********************************************************************

P Please consider the environment before printing this e-mail
-------------- next part --------------
A non-text attachment was scrubbed...
Name: cmake-msvc-stack-size.patch
Type: application/octet-stream
Size: 704 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20130924/7f9c38d0/attachment.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: template-factorial-test.patch
Type: application/octet-stream
Size: 1072 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20130924/7f9c38d0/attachment-0001.obj>


More information about the llvm-commits mailing list