Emit code for #includes in emitted C++ code all at the start of the file.

This commit is contained in:
Matt Pharr
2012-01-05 12:21:11 -08:00
parent cb7ad371c6
commit 48e9d4af39

View File

@@ -1741,17 +1741,6 @@ void CWriter::writeOperandWithCast(Value* Operand, const ICmpInst &Cmp) {
//
static void generateCompilerSpecificCode(formatted_raw_ostream& Out,
const TargetData *TD) {
// Alloca, ...
Out << "#include <stdlib.h>\n"
<< "#include <stdint.h>\n"
<< "/* get a declaration for alloca */\n"
<< "#ifdef _MSC_VER\n"
<< "#include <malloc.h>\n"
<< "#define alloca _alloca\n"
<< "#else\n"
<< "#include <alloca.h>\n"
<< "#endif\n\n";
// We output GCC specific attributes to preserve 'linkonce'ness on globals.
// If we aren't being compiled with GCC, just drop these attributes.
Out << "#ifndef __GNUC__ /* Can only support \"linkonce\" vars with GCC */\n"
@@ -1976,7 +1965,6 @@ bool CWriter::doInitialization(Module &M) {
Out << " DO NOT EDIT THIS FILE DIRECTLY\n";
Out << " *******************************************************************/\n\n";
// get declaration for alloca
Out << "/* Provide Declarations */\n";
Out << "#include <stdarg.h>\n"; // Varargs support
Out << "#include <setjmp.h>\n"; // Unwind support
@@ -1987,6 +1975,15 @@ bool CWriter::doInitialization(Module &M) {
Out << " #define NOMINMAX\n";
Out << " #include <windows.h>\n";
Out << "#endif // _MSC_VER\n";
Out << "#include <stdlib.h>\n";
Out << "#include <stdint.h>\n";
Out << "/* get a declaration for alloca */\n";
Out << "#ifdef _MSC_VER\n";
Out << " #include <malloc.h>\n";
Out << " #define alloca _alloca\n";
Out << "#else\n";
Out << " #include <alloca.h>\n";
Out << "#endif\n\n";
Out << "#include \"" << includeName << "\"\n";