[LLVMdev] [patch] Fix problems with build LLVM using gcc 4.1.0 (gcc CVS mainline)
Vladimir A. Merzliakov
wanderer at rsu.ru
Sun Oct 23 21:48:37 PDT 2005
Hi!
I have some problems with build current CVS version LLVM using GCC 4.1.0
(GCC CVS mainline version).
1) Build terminate with error:
llvm[3]: Compiling SparcV8CodeEmitter.cpp for Debug build
/usr/home/wanderer/pkg/build/llvm/obj/lib/Target/SparcV8/SparcV8GenCodeEmitter.inc:11:
error: definition of 'unsigned int
llvm::<unnamed>::SparcV8CodeEmitter::getBinaryCodeForInstr(llvm::MachineInstr&)'
is not in namespace enclosing 'llvm::<unnamed>::SparcV8CodeEmitter'
gmake[3]: ***
[/usr/home/wanderer/pkg/build/llvm/obj/lib/Target/SparcV8/Debug/SparcV8CodeEmitter.o]
Error 1
Problem in including SparcV8GenCodeEmitter.inc:
namespace llvm {
...
#include "SparcV8GenCodeEmitter.inc"
} // end llvm namespace
But SparcV8GenCodeEmitter.inc generated with
namespace llvm {
...
} // end llvm namespace
2) Same error but some diff. problem with AlphaCodeEmitter.cpp and
PPCCodeEmitter.cpp:
GCC don't like definition member-functions in global namespace with
declaration in llvm::<unnamed> :
3) Patch suggested in
http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20051017/028898.html
move END_WITH_NULL to before function name.
Vladimir
=== Patches ===========================
--- lib/Target/SparcV8/SparcV8CodeEmitter.cpp Mon Oct 24 08:25:17 2005
+++ lib/Target/SparcV8/SparcV8CodeEmitter.cpp.new Mon Oct 24 03:17:38 2005
@@ -181,6 +181,6 @@
abort();
}
-#include "SparcV8GenCodeEmitter.inc"
-
} // end llvm namespace
+
+#include "SparcV8GenCodeEmitter.inc"
--- lib/Target/Alpha/AlphaCodeEmitter.cpp Mon Oct 24 08:25:17 2005
+++ lib/Target/Alpha/AlphaCodeEmitter.cpp.new Mon Oct 24 07:08:42 2005
@@ -23,7 +23,8 @@
#include "llvm/Function.h"
#include "llvm/Support/Debug.h"
#include "llvm/ADT/Statistic.h"
-using namespace llvm;
+
+namespace llvm {
namespace {
Statistic<>
@@ -72,7 +73,7 @@
/// createAlphaCodeEmitterPass - Return a pass that emits the collected
Alpha code
/// to the specified MCE object.
-FunctionPass *llvm::createAlphaCodeEmitterPass(MachineCodeEmitter &MCE) {
+FunctionPass *createAlphaCodeEmitterPass(MachineCodeEmitter &MCE) {
return new AlphaCodeEmitter(MCE);
}
@@ -234,6 +235,7 @@
return rv;
}
+} // end llvm namespace
#include "AlphaGenCodeEmitter.inc"
--- lib/Target/PowerPC/PPCCodeEmitter.cpp Mon Oct 24 08:25:17 2005
+++ lib/Target/PowerPC/PPCCodeEmitter.cpp.new Mon Oct 24 06:39:29 2005
@@ -22,7 +22,8 @@
#include "llvm/CodeGen/MachineInstrBuilder.h"
#include "llvm/CodeGen/Passes.h"
#include "llvm/Support/Debug.h"
-using namespace llvm;
+
+namespace llvm {
namespace {
class PPCCodeEmitter : public MachineFunctionPass {
@@ -260,6 +261,8 @@
return rv;
}
+
+} // end llvm namespace
#include "PPCGenCodeEmitter.inc"
--- include/llvm/Support/CommandLine.h Mon Oct 24 08:25:16 2005
+++ include/llvm/Support/CommandLine.h.new Mon Oct 24 08:17:09 2005
@@ -334,13 +334,8 @@
}
};
-// Silly GCC doesn't allow attributes on a function definition.
template<class DataType>
-ValuesClass<DataType> values(const char *Arg, DataType Val, const char
*Desc,
- ...) END_WITH_NULL;
-
-template<class DataType>
-ValuesClass<DataType> values(const char *Arg, DataType Val, const char
*Desc,
+ValuesClass<DataType> END_WITH_NULL values(const char *Arg, DataType Val,
const char *Desc,
...) {
va_list ValueArgs;
va_start(ValueArgs, Desc);
More information about the llvm-dev
mailing list