Can't create "main" function?

I'm getting a strange behaviour when I attempt to create my main function:

auto func = static_cast<llvm::Function*>(module->getOrInsertFunction(
"main",
  types->type_void(), (llvm::Type*)0 ) );
ASSERT( func );
auto block = llvm::BasicBlock::Create( *context, "entry", func );

The "BasicBlock::Create" function is causing a segfault. This only
happens if the function is called "main", any other function and it
works fine. Prior to this call I also do this assert to ensure "main"
doesn't actually exist:
  ASSERT( !module->getFunction("main" ) );

I must be missing something trivial, but I'm not sure what.

Got it. I had a global_variable also with the name "main". Perhaps
getOrInsertFuntion needs an assert to check this (it was returning a
variable I guess rather than a function, and thus static_cast was broken).

Hi,

Got it. I had a global_variable also with the name "main". Perhaps
getOrInsertFuntion needs an assert to check this (it was returning a
variable I guess rather than a function, and thus static_cast was broken).

if you use LLVM's cast rather than static_cast then you will get an
assertion failure if the cast is wrong.

Ciao, Duncan.

Great, I'll change my casts to that mechanism instead.