From: Peter Collingbourne Date: Tue, 14 Jun 2016 23:13:15 +0000 (+0000) Subject: Verifier: check that functions have at most a single !prof attachment. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cf9e0af1ce8e645401aabf240954adf031433240;p=llvm Verifier: check that functions have at most a single !prof attachment. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@272734 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/IR/Verifier.cpp b/lib/IR/Verifier.cpp index 0395f5b36fe..29550e2e733 100644 --- a/lib/IR/Verifier.cpp +++ b/lib/IR/Verifier.cpp @@ -1976,7 +1976,7 @@ void Verifier::visitFunction(const Function &F) { "blockaddress may not be used with the entry block!", Entry); } - unsigned NumDebugAttachments = 0; + unsigned NumDebugAttachments = 0, NumProfAttachments = 0; // Visit metadata attachments. for (const auto &I : MDs) { // Verify that the attachment is legal. @@ -1990,6 +1990,11 @@ void Verifier::visitFunction(const Function &F) { AssertDI(isa(I.second), "function !dbg attachment must be a subprogram", &F, I.second); break; + case LLVMContext::MD_prof: + ++NumProfAttachments; + Assert(NumProfAttachments == 1, + "function must have a single !prof attachment", &F, I.second); + break; } // Verify the metadata itself. diff --git a/test/Verifier/metadata-function-prof.ll b/test/Verifier/metadata-function-prof.ll new file mode 100644 index 00000000000..ca0628f44f8 --- /dev/null +++ b/test/Verifier/metadata-function-prof.ll @@ -0,0 +1,12 @@ +; RUN: not llvm-as %s -disable-output 2>&1 | FileCheck %s + +define void @foo() !prof !0 { + unreachable +} + +; CHECK: function must have a single !prof attachment +define void @foo2() !prof !0 !prof !0 { + unreachable +} + +!0 = !{}