Assert on duplicate registration. Don't depend on function pointer equality.
authorRafael Espindola <rafael.espindola@gmail.com>
Wed, 16 Oct 2013 16:21:40 +0000 (16:21 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Wed, 16 Oct 2013 16:21:40 +0000 (16:21 +0000)
commit670655471dfc35d90271393bd3e6e26a708f1a3c
tree9f892fa407308503dc2b9d95ac3a8d7687ca8421
parenta2cd42a0a7c46d158714c09047a77b7bc1cf9d69
Assert on duplicate registration. Don't depend on function pointer equality.

Before this patch we would assert when building llvm as multiple shared
libraries (cmake's BUILD_SHARED_LIBS). The problem was the line

if (T.AsmStreamerCtorFn == Target::createDefaultAsmStreamer)

which returns false because of -fvisibility-inlines-hidden. It is easy
to fix just this one case, but I decided to try to also make the
registration more strict. It looks like the old logic for ignoring
followup registration was just a temporary hack that outlived its
usefulness.

This patch converts the ifs to asserts, fixes the few cases that were
registering twice and makes sure all the asserts compare with null.

Thanks for Joerg for reporting the problem and reviewing the patch.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@192803 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/Support/TargetRegistry.h
lib/Target/NVPTX/NVPTXTargetMachine.cpp
unittests/ExecutionEngine/JIT/JITTest.cpp