From 1b7b1786a560db98c751d8303bc5097bb6f41643 Mon Sep 17 00:00:00 2001 From: Joel Stanley Date: Wed, 12 Feb 2003 20:45:00 +0000 Subject: [PATCH] Fixed alloca declaration problem on sun. llvm-svn: 5546 --- lib/CWriter/Writer.cpp | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/lib/CWriter/Writer.cpp b/lib/CWriter/Writer.cpp index 8d9b314695f..88e0a264a9c 100644 --- a/lib/CWriter/Writer.cpp +++ b/lib/CWriter/Writer.cpp @@ -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 \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 \n"; // get declaration for alloca - Out << "/* Provide Declarations */\n" - << "#include \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