view gen/linkage.h @ 1318:bac742d3a72d

Make sure this testcase keeps crashing with -O3. Recent optimization improvements made LLVM realize the store-to-null was unavoidable, so it deleted all of main() and replaced it with 'unreachable'. Because the body of main() no longer even contained a return instruction, calling it caused random code to be ran instead. This happened to be the code that links in the ModuleInfo on my machine, which then returned "successfully".
author Frits van Bommel <fvbommel wxs.nl>
date Sat, 09 May 2009 00:55:47 +0200
parents 123812e02bc8
children 3647bef175d7
line wrap: on
line source

#ifndef LDC_GEN_LINKAGE_H
#define LDC_GEN_LINKAGE_H

#include "gen/llvm-version.h"

// Make it easier to test new linkage types
// Also used to adapt to some changes in LLVM between 2.5 and 2.6


// LLVM r66339 introduces LinkOnceODRLinkage, which is just what we want here.
// (It also renamed LinkOnceLinkage, so this #if is needed for LDC to compile
// with both 2.5 and trunk)
#if LLVM_REV >= 66339
#  define TEMPLATE_LINKAGE_TYPE         llvm::GlobalValue::LinkOnceODRLinkage
#  define TYPEINFO_LINKAGE_TYPE         llvm::GlobalValue::LinkOnceODRLinkage
// The One-Definition-Rule shouldn't matter for debug info, right?
#  define DEBUGINFO_LINKONCE_LINKAGE_TYPE \
                                        llvm::GlobalValue::LinkOnceAnyLinkage

// For 2.5 and any LLVM revision before 66339 we want to use LinkOnceLinkage
// It's equivalent to LinkOnceAnyLinkage in trunk except that the inliner had a
// hack (removed in r66339) to allow inlining of templated functions even though
// LinkOnce doesn't technically allow that.
#else
#  define TEMPLATE_LINKAGE_TYPE         llvm::GlobalValue::LinkOnceLinkage
#  define TYPEINFO_LINKAGE_TYPE         llvm::GlobalValue::LinkOnceLinkage
#  define DEBUGINFO_LINKONCE_LINKAGE_TYPE \
                                        llvm::GlobalValue::LinkOnceLinkage
#endif

#endif