Preserve compatibility with non-gcc compilers

llvm-svn: 6932
This commit is contained in:
Chris Lattner 2003-06-28 17:15:12 +00:00
parent 90921a7eee
commit a80de5a3be
1 changed files with 14 additions and 4 deletions

View File

@ -572,9 +572,13 @@ bool CWriter::nameAllUsedStructureTypes(Module &M) {
return Changed; return Changed;
} }
static void generateAllocaDecl(std::ostream& Out) { // generateCompilerSpecificCode - This is where we add conditional compilation
// On SunOS, we need to insert the alloca macro & proto for the builtin. // directives to cater to specific compilers as need be.
Out << "#ifdef sun\n" //
static void generateCompilerSpecificCode(std::ostream& Out) {
// Alloca is hard to get, and we don't want to include stdlib.h here...
Out << "/* get a declaration for alloca */\n"
<< "#ifdef sun\n"
<< "extern void *__builtin_alloca(unsigned long);\n" << "extern void *__builtin_alloca(unsigned long);\n"
<< "#define alloca(x) __builtin_alloca(x)\n" << "#define alloca(x) __builtin_alloca(x)\n"
<< "#else\n" << "#else\n"
@ -582,6 +586,12 @@ static void generateAllocaDecl(std::ostream& Out) {
<< "#include <alloca.h>\n" << "#include <alloca.h>\n"
<< "#endif\n" << "#endif\n"
<< "#endif\n\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__\n"
<< "#define __attribute__(X)\n"
<< "#endif\n";
} }
void CWriter::printModule(Module *M) { void CWriter::printModule(Module *M) {
@ -606,9 +616,9 @@ void CWriter::printModule(Module *M) {
// get declaration for alloca // get declaration for alloca
Out << "/* Provide Declarations */\n"; Out << "/* Provide Declarations */\n";
generateAllocaDecl(Out);
Out << "#include <stdarg.h>\n"; Out << "#include <stdarg.h>\n";
Out << "#include <setjmp.h>\n"; Out << "#include <setjmp.h>\n";
generateCompilerSpecificCode(Out);
// Provide a definition for `bool' if not compiling with a C++ compiler. // Provide a definition for `bool' if not compiling with a C++ compiler.
Out << "\n" Out << "\n"