Ada support for llvm-gcc4

Hello, Duncan.

3-fortran.diff
  Get fortran to compile: use the common stubs and rip out
the incomplete collection of dummy routines someone already put in.
With this patch, the fortran build dies at this point:

cc1: llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp:367: void llvm::ScheduleDAG::AddOperand(llvm:
:MachineInstr*, llvm::SDOperand, unsigned int, const llvm::TargetInstrDescriptor*, std::map<llvm::SDNode*, unsign
ed int, std::less<llvm::SDNode*>, std::allocator<std::pair<llvm::SDNode* const, unsigned int> > >&): Assertion `R
egMap->getRegClass(VReg) == RC && "Register class of operand and regclass of use don't agree!"' failed.
./../../gcc.llvm.master/libgfortran/runtime/environ.c:619: internal compiler error: Aborted

This looks like PR879. Will you try to build with -D__NO_MATH_INLINES and check, whether the assertion still exists?

Hi Anton,

> 3-fortran.diff
> Get fortran to compile: use the common stubs and rip out
> the incomplete collection of dummy routines someone already put in.
> With this patch, the fortran build dies at this point:
>
> cc1: llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp:367: void llvm::ScheduleDAG::AddOperand(llvm:
> :MachineInstr*, llvm::SDOperand, unsigned int, const llvm::TargetInstrDescriptor*, std::map<llvm::SDNode*, unsign
> ed int, std::less<llvm::SDNode*>, std::allocator<std::pair<llvm::SDNode* const, unsigned int> > >&): Assertion `R
> egMap->getRegClass(VReg) == RC && "Register class of operand and regclass of use don't agree!"' failed.
> ./../../gcc.llvm.master/libgfortran/runtime/environ.c:619: internal compiler error: Aborted
This looks like PR879. Will you try to build with -D__NO_MATH_INLINES and check, whether the assertion still exists?

you are right: a build with -D__NO_MATH_INLINES does not trigger that assertion.
Instead it triggers this one later on:

llvm-convert.cpp:4243: static llvm::Constant* TreeConstantToLLVM::Convert(tree_node*):
  Assertion `((__extension__ ({ const tree __t = (exp); char const __c = tree_code_type[(int)
  (((enum tree_code) (__t)->common.code))]; if (!((__c) != tcc_type)) tree_class_check_failed
  (__t, tcc_type, "../../gcc.llvm.master/gcc/llvm-convert.cpp", 4243, __FUNCTION__); __t; })
  ->common.constant_flag) || ((enum tree_code) (exp)->common.code) == STRING_CST) &&
  "Isn't a constant!"' failed.

libgfortran/intrinsics/selected_int_kind.f90: In function 'selected_int_kind':
libgfortran/intrinsics/selected_int_kind.f90:22: internal compiler error: Aborted

Best wishes,

Duncan.