[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