Fixed alloca declaration problem on sun.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5546 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Joel Stanley 2003-02-12 20:45:00 +00:00
parent 98d829c22f
commit ecd78ac1cb
2 changed files with 38 additions and 16 deletions

View File

@ -504,6 +504,17 @@ bool CWriter::nameAllUsedStructureTypes(Module &M) {
return Changed;
}
static void generateAllocaDecl(ostream& Out)
{
// On SunOS, we need to insert the alloca macro & proto for the builtin.
Out << "#ifdef sun\n"
<< "extern void *__builtin_alloca(unsigned long);\n"
<< "#define alloca(x) __builtin_alloca(x)\n"
<< "#else\n"
<< "#include <alloca.h>\n"
<< "#endif\n\n";
}
void CWriter::printModule(Module *M) {
// Calculate which global values have names that will collide when we throw
// away type information.
@ -528,18 +539,18 @@ void CWriter::printModule(Module *M) {
//Out << "#include <stdlib.h>\n";
// get declaration for alloca
Out << "/* Provide Declarations */\n"
<< "#include <alloca.h>\n\n"
// Provide a definition for null if one does not already exist,
// and for `bool' if not compiling with a C++ compiler.
<< "#ifndef NULL\n#define NULL 0\n#endif\n\n"
Out << "/* Provide Declarations */\n";
generateAllocaDecl(Out);
// Provide a definition for null if one does not already exist,
// and for `bool' if not compiling with a C++ compiler.
Out << "#ifndef NULL\n#define NULL 0\n#endif\n\n"
<< "#ifndef __cplusplus\ntypedef unsigned char bool;\n#endif\n"
<< "\n\n/* Support for floating point constants */\n"
<< "typedef unsigned long long ConstantDoubleTy;\n"
<< "typedef unsigned int ConstantFloatTy;\n"
<< "\n\n/* Global Declarations */\n";
// First output all the declarations for the program, because C requires

View File

@ -504,6 +504,17 @@ bool CWriter::nameAllUsedStructureTypes(Module &M) {
return Changed;
}
static void generateAllocaDecl(ostream& Out)
{
// On SunOS, we need to insert the alloca macro & proto for the builtin.
Out << "#ifdef sun\n"
<< "extern void *__builtin_alloca(unsigned long);\n"
<< "#define alloca(x) __builtin_alloca(x)\n"
<< "#else\n"
<< "#include <alloca.h>\n"
<< "#endif\n\n";
}
void CWriter::printModule(Module *M) {
// Calculate which global values have names that will collide when we throw
// away type information.
@ -528,18 +539,18 @@ void CWriter::printModule(Module *M) {
//Out << "#include <stdlib.h>\n";
// get declaration for alloca
Out << "/* Provide Declarations */\n"
<< "#include <alloca.h>\n\n"
// Provide a definition for null if one does not already exist,
// and for `bool' if not compiling with a C++ compiler.
<< "#ifndef NULL\n#define NULL 0\n#endif\n\n"
Out << "/* Provide Declarations */\n";
generateAllocaDecl(Out);
// Provide a definition for null if one does not already exist,
// and for `bool' if not compiling with a C++ compiler.
Out << "#ifndef NULL\n#define NULL 0\n#endif\n\n"
<< "#ifndef __cplusplus\ntypedef unsigned char bool;\n#endif\n"
<< "\n\n/* Support for floating point constants */\n"
<< "typedef unsigned long long ConstantDoubleTy;\n"
<< "typedef unsigned int ConstantFloatTy;\n"
<< "\n\n/* Global Declarations */\n";
// First output all the declarations for the program, because C requires