diff options
author | Peter Collingbourne <peter@pcc.me.uk> | 2017-02-09 23:46:26 +0000 |
---|---|---|
committer | Peter Collingbourne <peter@pcc.me.uk> | 2017-02-09 23:46:26 +0000 |
commit | 17febdbb25ea50a73bcda04b55e1942bd3ece2db (patch) | |
tree | c1710ad95d9a3935469d5d6acb808d5bfd3c73ab /llvm/lib/Transforms | |
parent | d0d8daa37c86e88aaba1a8dd260e2f90700c2645 (diff) | |
download | bcm5719-llvm-17febdbb25ea50a73bcda04b55e1942bd3ece2db.tar.gz bcm5719-llvm-17febdbb25ea50a73bcda04b55e1942bd3ece2db.zip |
WholeProgramDevirt: Check that VCP candidate functions are defined before evaluating them.
This was crashing before.
llvm-svn: 294666
Diffstat (limited to 'llvm/lib/Transforms')
-rw-r--r-- | llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp b/llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp index 844cc0f70ee..66c4f6eb86d 100644 --- a/llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp +++ b/llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp @@ -571,12 +571,12 @@ bool DevirtModule::tryVirtualConstProp( if (BitWidth > 64) return false; - // Make sure that each function does not access memory, takes at least one - // argument, does not use its first argument (which we assume is 'this'), - // and has the same return type. + // Make sure that each function is defined, does not access memory, takes at + // least one argument, does not use its first argument (which we assume is + // 'this'), and has the same return type. for (VirtualCallTarget &Target : TargetsForSlot) { - if (!Target.Fn->doesNotAccessMemory() || Target.Fn->arg_empty() || - !Target.Fn->arg_begin()->use_empty() || + if (Target.Fn->isDeclaration() || !Target.Fn->doesNotAccessMemory() || + Target.Fn->arg_empty() || !Target.Fn->arg_begin()->use_empty() || Target.Fn->getReturnType() != RetType) return false; } |