Be consistent with other attribute methods, and
authorDuncan Sands <baldrick@free.fr>
Mon, 21 Jan 2008 11:27:55 +0000 (11:27 +0000)
committerDuncan Sands <baldrick@free.fr>
Mon, 21 Jan 2008 11:27:55 +0000 (11:27 +0000)
check the callee also if it is known.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@46206 91177308-0d34-0410-b5e6-96231b3b80d8

lib/VMCore/Instructions.cpp

index ca9ea3bfa3be7b5daa2ae573dad999c7d6cb1ca3..156eff169c1ece8e7a4cc97e9114f7ce34900cce 100644 (file)
@@ -406,7 +406,13 @@ bool CallInst::isStructReturn() const {
 
 /// @brief Determine if any call argument is an aggregate passed by value.
 bool CallInst::hasByValArgument() const {
-  return ParamAttrs && ParamAttrs->hasAttrSomewhere(ParamAttr::ByVal);
+  if (ParamAttrs && ParamAttrs->hasAttrSomewhere(ParamAttr::ByVal))
+    return true;
+  // Be consistent with other methods and check the callee too.
+  if (const Function *F = getCalledFunction())
+    if (const ParamAttrsList *PAL = F->getParamAttrs())
+      return PAL->hasAttrSomewhere(ParamAttr::ByVal);
+  return false;
 }
 
 void CallInst::setDoesNotThrow(bool doesNotThrow) {