[llvm] 49d731b - Verifier: Check frame-pointer attribute values

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Wed Dec 11 06:24:03 PST 2019


Author: Matt Arsenault
Date: 2019-12-11T19:53:49+05:30
New Revision: 49d731b5e0ec643ed47dc49c4cffcf974e5af5ad

URL: https://github.com/llvm/llvm-project/commit/49d731b5e0ec643ed47dc49c4cffcf974e5af5ad
DIFF: https://github.com/llvm/llvm-project/commit/49d731b5e0ec643ed47dc49c4cffcf974e5af5ad.diff

LOG: Verifier: Check frame-pointer attribute values

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.

Added: 
    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

Modified: 
    llvm/lib/IR/Verifier.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/IR/Verifier.cpp b/llvm/lib/IR/Verifier.cpp
index 876865edde0e..afc61b088915 100644
--- a/llvm/lib/IR/Verifier.cpp
+++ b/llvm/lib/IR/Verifier.cpp
@@ -1843,6 +1843,13 @@ void Verifier::verifyFunctionAttrs(FunctionType *FT, AttributeList Attrs,
     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(

diff  --git a/llvm/test/Verifier/invalid-frame-pointer-attr-empty.ll b/llvm/test/Verifier/invalid-frame-pointer-attr-empty.ll
new file mode 100644
index 000000000000..b1cd2a3a6d3b
--- /dev/null
+++ b/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"="" }

diff  --git a/llvm/test/Verifier/invalid-frame-pointer-attr-no-value.ll b/llvm/test/Verifier/invalid-frame-pointer-attr-no-value.ll
new file mode 100644
index 000000000000..8ba4d4eec821
--- /dev/null
+++ b/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" }

diff  --git a/llvm/test/Verifier/invalid-frame-pointer-attr.ll b/llvm/test/Verifier/invalid-frame-pointer-attr.ll
new file mode 100644
index 000000000000..d589b96acc04
--- /dev/null
+++ b/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" }


        


More information about the llvm-commits mailing list