I think all of my breakage is resolved, however, the attribuets  
changes introduced a number of jit regressions.  The problem is that  
"exit" is now getting declared as:

declare void @exit(i32) noreturn nounwind

This is a problem for lli.cpp, because it does this:

   Constant *Exit = Mod->getOrInsertFunction("exit", Type::VoidTy,
                                                          
Type::Int32Ty, NULL);
  ...
   if (Function *ExitF = dyn_cast<Function>(Exit)) {
  ...
   } else {
     std::cerr << "ERROR: exit defined with wrong prototype!\n";
     abort();



The problem here is that getOrInsertFunction is returning a bitcast of  
the exit function (with the type above) to a void(int)* type.

I think that getOrInsertFunction should just return the function (not  
a bitcast) if the function type other than the attributes are the same.

-Chris
_______________________________________________
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits

Reply via email to