From 9f8e6da019a99960af59c79e17659dd2dba8433e Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Tue, 11 Jun 2013 13:18:13 +0000 Subject: [PATCH] Require members of llvm.used to be named. The effect of llvm.used is to introduce an invisible reference, so this seems a reasonable restriction. It will be used to provide an easy ordering of the entries in llvm.used. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@183743 91177308-0d34-0410-b5e6-96231b3b80d8 --- docs/LangRef.rst | 14 +++++++------- lib/IR/Verifier.cpp | 1 + 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/docs/LangRef.rst b/docs/LangRef.rst index 949dc4a8761..2c55d333a65 100644 --- a/docs/LangRef.rst +++ b/docs/LangRef.rst @@ -2932,8 +2932,8 @@ The '``llvm.used``' Global Variable The ``@llvm.used`` global is an array which has :ref:`appending linkage `. This array contains a list of -pointers to global variables, functions and aliases which may optionally have a -pointer cast formed of bitcast or getelementptr. For example, a legal +pointers to named global variables, functions and aliases which may optionally +have a pointer cast formed of bitcast or getelementptr. For example, a legal use of it is: .. code-block:: llvm @@ -2948,11 +2948,11 @@ use of it is: If a symbol appears in the ``@llvm.used`` list, then the compiler, assembler, and linker are required to treat the symbol as if there is a reference to the -symbol that it cannot see. For example, if a variable has internal linkage and -no references other than that from the ``@llvm.used`` list, it cannot be -deleted. This is commonly used to represent references from inline asms and -other things the compiler cannot "see", and corresponds to -"``attribute((used))``" in GNU C. +symbol that it cannot see (which is why they have to be named). For example, if +a variable has internal linkage and no references other than that from the +``@llvm.used`` list, it cannot be deleted. This is commonly used to represent +references from inline asms and other things the compiler cannot "see", and +corresponds to "``attribute((used))``" in GNU C. On some targets, the code generator must emit a directive to the assembler or object file to prevent the assembler and linker from diff --git a/lib/IR/Verifier.cpp b/lib/IR/Verifier.cpp index 41364b2e6a4..f8774bc3d9d 100644 --- a/lib/IR/Verifier.cpp +++ b/lib/IR/Verifier.cpp @@ -467,6 +467,7 @@ void Verifier::visitGlobalVariable(GlobalVariable &GV) { Assert1( isa(V) || isa(V) || isa(V), "invalid llvm.used member", V); + Assert1(V->hasName(), "members of llvm.used must be named", V); } } }