Throw an error when stack realignment stuff fails instead of silent
authorAnton Korobeynikov <asl@math.spbu.ru>
Sun, 8 Nov 2009 12:58:40 +0000 (12:58 +0000)
committerAnton Korobeynikov <asl@math.spbu.ru>
Sun, 8 Nov 2009 12:58:40 +0000 (12:58 +0000)
code miscompilation

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

lib/Target/X86/X86RegisterInfo.cpp

index c5ff525bdb4290b7c1f648fbf16ce55555afc4e1..63d28218095abb8b4a0dff17aeafe797aaaf1a40 100644 (file)
@@ -450,12 +450,16 @@ bool X86RegisterInfo::hasFP(const MachineFunction &MF) const {
 
 bool X86RegisterInfo::needsStackRealignment(const MachineFunction &MF) const {
   const MachineFrameInfo *MFI = MF.getFrameInfo();
+  bool requiresRealignment =
+    RealignStack && (MFI->getMaxAlignment() > StackAlign);
 
   // FIXME: Currently we don't support stack realignment for functions with
   //        variable-sized allocas
-  return (RealignStack &&
-          (MFI->getMaxAlignment() > StackAlign &&
-           !MFI->hasVarSizedObjects()));
+  if (requiresRealignment && MFI->hasVarSizedObjects())
+    llvm_report_error(
+      "Stack realignment in presense of dynamic allocas is not supported");
+
+  return requiresRealignment;
 }
 
 bool X86RegisterInfo::hasReservedCallFrame(MachineFunction &MF) const {