forked from OSchip/llvm-project
Preserve compatibility with non-gcc compilers
llvm-svn: 6932
This commit is contained in:
parent
90921a7eee
commit
a80de5a3be
|
@ -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"
|
||||||
|
|
Loading…
Reference in New Issue