summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorJoel Stanley <jstanley@cs.uiuc.edu>2003-02-12 20:45:00 +0000
committerJoel Stanley <jstanley@cs.uiuc.edu>2003-02-12 20:45:00 +0000
commite490214bae20ebefea772020e6bdf05ce00ed5fe (patch)
treea97809a6be7d5416a0beadd2dedfb4f366e9bc3e /llvm/lib
parent5c6961c50954c283a7404ffd34f671e098d48ee2 (diff)
downloadbcm5719-llvm-e490214bae20ebefea772020e6bdf05ce00ed5fe.tar.gz
bcm5719-llvm-e490214bae20ebefea772020e6bdf05ce00ed5fe.zip
Fixed alloca declaration problem on sun.
llvm-svn: 5546
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/CWriter/Writer.cpp27
1 files changed, 19 insertions, 8 deletions
diff --git a/llvm/lib/CWriter/Writer.cpp b/llvm/lib/CWriter/Writer.cpp
index 8d9b314695f..88e0a264a9c 100644
--- a/llvm/lib/CWriter/Writer.cpp
+++ b/llvm/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 <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
OpenPOWER on IntegriCloud