[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