A lot of system specific knowledge is already present in LLVM. This is used to populate several fields in global.params instead of hard coded values in main(). Ensures that the frontend and LLVM have always the same values.
The string representation of the data layout is retrieved from the TargetData class (in main) and passed via global.params.dataLayout to the module. Since the gTargetData is also a global variable it makes no sense to pass this information using another global variable.
- New functions codeGenOptLevel() and verifyModule() to remove code duplication
- Hidden option no-verify renamed to disable-verify and moved to optimizer (like opt tool)
- Removed global.params.noVerify
- Wraps some LDC specific code in 'IN_LLVM' section
- Adds some MSVC specific code to 'IN_LLVM' section
- Removes an unused include file
Net result is much less errors with MSVC.
Previously, LDC would crash in the backend due to the fact that the IR is typed in such cases (we recently had such an instance with Tango, where an extern( C ) function was declared once with int and once with size_t).
fix line ending
---
This is the last commit in the series of merges to the DMD front-end 1.067. The vararg-related changes (e.g. DMD commit d759ab9a5db02a13b923922264751b4a6d0eb9df and 1a7126117786e5c1bc80ea74e1f5bc97cc20d51c, __argTypes, etc.) have not been merged yet.
5391 Crash with recursive alias declaration
When a recursive alias declaration is encountered, mark it as
type error (not just as an alias to itself of type error).
5349 ICE(toir.c): nested class in static member function
When checking if a nested class can reach a parent class, it should not be
possible to jump through static functions. Static member functions were just
being silently ignored, which meant nonsense was passed to the backend.
(Didn't always cause an ICE, sometimes generates nonsense code).