llvm-6502/test/Transforms/GlobalOpt
Chandler Carruth 7362ac7f8c Fix a crash on valid (if UB) bitcode that is produced for some global
constants in C++11 mode. I have no idea why it required such particular
circumstances to get here, the code seems clearly to rely upon unchecked
assumptions.

Specifically, when we decide to form an index into a struct type, we may
have gone through (at least one) zero-length array indexing round, which
would have left the offset un-adjusted, and thus not necessarily valid
for use when indexing the struct type.

This is just an canonicalization step, so the correct thing is to refuse
to canonicalize nonsensical GEPs of this form. Implemented, and test
case added.

Fixes PR12642. Pair debugged and coded with Richard Smith. =] I credit
him with most of the debugging, and preventing me from writing the wrong
code.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@155466 91177308-0d34-0410-b5e6-96231b3b80d8
2012-04-24 18:42:47 +00:00
..
2004-10-10-CastStoreOnce.ll
2005-06-15-LocalizeConstExprCrash.ll
2005-09-27-Crash.ll Land the long talked about "type system rewrite" patch. This 2011-07-09 17:41:24 +00:00
2006-07-07-InlineAsmCrash.ll
2006-11-01-ShrinkGlobalPhiCrash.ll
2007-04-05-Crash.ll manually upgrade a bunch of tests to modern syntax, and remove some that 2011-06-17 03:14:27 +00:00
2007-05-13-Crash.ll
2007-06-04-PackedStruct.ll
2007-11-09-GEP-GEP-Crash.ll
2008-01-03-Crash.ll
2008-01-13-OutOfRangeSROA.ll
2008-01-29-VolatileGlobal.ll Upgrade syntax of tests using volatile instructions to use 'load volatile' instead of 'volatile load', which is archaic. 2011-11-27 06:54:59 +00:00
2008-04-26-SROA-Global-Align.ll Add unnamed_addr when we can show that address of a global is not used. 2011-01-19 16:32:21 +00:00
2008-07-17-addrspace.ll more test cleanup 2010-09-02 22:38:56 +00:00
2008-12-16-HeapSRACrash-2.ll manually upgrade a bunch of tests to modern syntax, and remove some that 2011-06-17 03:14:27 +00:00
2008-12-16-HeapSRACrash.ll manually upgrade a bunch of tests to modern syntax, and remove some that 2011-06-17 03:14:27 +00:00
2009-01-13-phi-user.ll
2009-02-15-BitcastAlias.ll
2009-02-15-ResolveAlias.ll
2009-03-05-dbg.ll
2009-03-06-Anonymous.ll
2009-03-07-PromotePtrToBool.ll Add unnamed_addr when we can show that address of a global is not used. 2011-01-19 16:32:21 +00:00
2009-06-01-RecursivePHI.ll
2009-11-16-BrokenPerformHeapAllocSRoA.ll
2009-11-16-MallocSingleStoreToGlobalVar.ll Add unnamed_addr when we can show that address of a global is not used. 2011-01-19 16:32:21 +00:00
2010-02-25-MallocPromote.ll
2010-02-26-MallocSROA.ll
2010-10-19-WeakOdr.ll GlobalOpt: EvaluateFunction() must not evaluate stores to weak_odr globals. 2010-10-19 16:47:23 +00:00
2011-04-09-EmptyGlobalCtors.ll Add back a couple checks removed by r129128; the fact that an intitializer 2011-04-09 09:11:09 +00:00
alias-resolve.ll
atomic.ll Teach GlobalOpt to handle atomic accesses to globals. 2012-02-05 19:56:38 +00:00
basictest.ll
constantexpr-dangle.ll
constantfold-initializers.ll Fix a crash on valid (if UB) bitcode that is produced for some global 2012-04-24 18:42:47 +00:00
crash.ll fix PR9856, an incorrectly conservative assertion: a global can be 2011-05-22 07:15:13 +00:00
ctor-list-opt-constexpr.ll PR11705, part 2: globalopt shouldn't put inttoptr/ptrtoint operations into global initializers if there's an implied extension or truncation. 2012-01-05 23:03:32 +00:00
ctor-list-opt-inbounds.ll
ctor-list-opt.ll Reduce and merge testcases. 2011-01-16 09:13:31 +00:00
cxx-dtor.ll GlobalOpt: Be more aggressive about elminating side-effect free static dtors. 2012-02-09 14:26:06 +00:00
deadfunction.ll Refactor code from inlining and globalopt that checks whether a function definition is unused, and enhance it so it can tell that functions which are only used by a blockaddress are in fact dead. This probably doesn't happen much on most code, but the Linux kernel's _THIS_IP_ can trigger this issue with blockaddress. (GlobalDCE can also handle the given tescase, but we only run that at -O3.) Found while looking at PR11180. 2011-10-20 05:23:42 +00:00
deadglobal-2.ll
deadglobal.ll
globalsra-partial.ll
globalsra-unknown-index.ll Add unnamed_addr when we can show that address of a global is not used. 2011-01-19 16:32:21 +00:00
globalsra.ll
heap-sra-1.ll
heap-sra-2.ll
heap-sra-3.ll
heap-sra-4.ll
heap-sra-phi.ll
integer-bool.ll
invariant.ll Check for the correct size in the invariant marker. 2012-02-20 23:32:26 +00:00
invoke.ll Teach globalopt how to evaluate an invoke with a non-void return type. 2012-03-13 18:01:37 +00:00
iterate.ll
lit.local.cfg Replace all instances of dg.exp file with lit.local.cfg, since all tests are run with LIT now and now Dejagnu. dg.exp is no longer needed. 2012-02-16 06:28:33 +00:00
load-store-global.ll
malloc-promote-1.ll
malloc-promote-2.ll Trim tests and convert to FileCheck. 2010-04-14 20:22:17 +00:00
memcpy.ll rip out a ton of intrinsic modernization logic from AutoUpgrade.cpp, which is 2011-06-18 06:05:24 +00:00
memset-null.ll Add testcase for r132290, to check for the crasher caught by the buildbots 2011-05-29 19:41:14 +00:00
memset.ll rip out a ton of intrinsic modernization logic from AutoUpgrade.cpp, which is 2011-06-18 06:05:24 +00:00
metadata.ll Use llvm.foo as the intrinsic, rather than llvm.dbg.value. Since the 2010-05-04 20:09:25 +00:00
phi-select.ll
storepointer-compare.ll
storepointer.ll
trivialstore.ll
undef-init.ll
unnamed-addr.ll Add unnamed_addr when we can show that address of a global is not used. 2011-01-19 16:32:21 +00:00
zeroinitializer-gep-load.ll GlobalOpt: If we have an inbounds GEP from a ConstantAggregateZero global that we just determined to be constant, replace all loads from it with a zero value. 2012-03-28 14:50:09 +00:00