[PATCH] D71257: Verifier: Check frame-pointer attribute values

Matt Arsenault via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Dec 10 04:48:47 PST 2019


arsenm created this revision.
arsenm added a reviewer: thegameg.
Herald added subscribers: hiraditya, wdng.
Herald added a project: LLVM.

There are a few places that check specific string attributes have
particular values, and assert if they are something else. The verifier
should catch these kinds of cases.


https://reviews.llvm.org/D71257

Files:
  llvm/lib/IR/Verifier.cpp
  llvm/test/Verifier/invalid-frame-pointer-attr-empty.ll
  llvm/test/Verifier/invalid-frame-pointer-attr-no-value.ll
  llvm/test/Verifier/invalid-frame-pointer-attr.ll


Index: llvm/test/Verifier/invalid-frame-pointer-attr.ll
===================================================================
--- /dev/null
+++ llvm/test/Verifier/invalid-frame-pointer-attr.ll
@@ -0,0 +1,9 @@
+; RUN: not llvm-as < %s -o /dev/null 2>&1 | FileCheck %s
+
+; CHECK: invalid value for 'frame-pointer' attribute: arst
+
+define void @func() #0 {
+  ret void
+}
+
+attributes #0 = { "frame-pointer"="arst" }
Index: llvm/test/Verifier/invalid-frame-pointer-attr-no-value.ll
===================================================================
--- /dev/null
+++ llvm/test/Verifier/invalid-frame-pointer-attr-no-value.ll
@@ -0,0 +1,9 @@
+; RUN: not llvm-as < %s -o /dev/null 2>&1 | FileCheck %s
+
+; CHECK: invalid value for 'frame-pointer' attribute:
+
+define void @func() #0 {
+  ret void
+}
+
+attributes #0 = { "frame-pointer" }
Index: llvm/test/Verifier/invalid-frame-pointer-attr-empty.ll
===================================================================
--- /dev/null
+++ llvm/test/Verifier/invalid-frame-pointer-attr-empty.ll
@@ -0,0 +1,9 @@
+; RUN: not llvm-as < %s -o /dev/null 2>&1 | FileCheck %s
+
+; CHECK: invalid value for 'frame-pointer' attribute:
+
+define void @func() #0 {
+  ret void
+}
+
+attributes #0 = { "frame-pointer"="" }
Index: llvm/lib/IR/Verifier.cpp
===================================================================
--- llvm/lib/IR/Verifier.cpp
+++ llvm/lib/IR/Verifier.cpp
@@ -1843,6 +1843,13 @@
     if (Args.second && !CheckParam("number of elements", *Args.second))
       return;
   }
+
+  if (Attrs.hasFnAttribute("frame-pointer")) {
+    StringRef FP = Attrs.getAttribute(AttributeList::FunctionIndex,
+                                      "frame-pointer").getValueAsString();
+    if (FP != "all" && FP != "non-leaf" && FP != "none")
+      CheckFailed("invalid value for 'frame-pointer' attribute: " + FP, V);
+  }
 }
 
 void Verifier::verifyFunctionMetadata(


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D71257.233055.patch
Type: text/x-patch
Size: 1911 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20191210/8e603193/attachment.bin>


More information about the llvm-commits mailing list