Skip to content

Commit

Permalink
Require members of llvm.used to be named.
Browse files Browse the repository at this point in the history
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
  • Loading branch information
espindola committed Jun 11, 2013
1 parent 6c921a5 commit 9f8e6da
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 7 deletions.
14 changes: 7 additions & 7 deletions docs/LangRef.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2932,8 +2932,8 @@ The '``llvm.used``' Global Variable

The ``@llvm.used`` global is an array which has
:ref:`appending linkage <linkage_appending>`. 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
Expand All @@ -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
Expand Down
1 change: 1 addition & 0 deletions lib/IR/Verifier.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -467,6 +467,7 @@ void Verifier::visitGlobalVariable(GlobalVariable &GV) {
Assert1(
isa<GlobalVariable>(V) || isa<Function>(V) || isa<GlobalAlias>(V),
"invalid llvm.used member", V);
Assert1(V->hasName(), "members of llvm.used must be named", V);
}
}
}
Expand Down

0 comments on commit 9f8e6da

Please sign in to comment.