common globals may also not be marked constant.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78169 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2009-08-05 05:41:44 +00:00
parent 40a0b2c305
commit cd81f5df27
2 changed files with 10 additions and 6 deletions

View File

@ -564,9 +564,10 @@ define i32 @main() { <i>; i32()* </
global scope.
Symbols with "<tt>common</tt>" linkage are merged in the same way as
<tt>weak symbols</tt>, and they may not be deleted if unreferenced.
Further, <tt>common</tt> symbols may not have an explicit section, and
must have a zero initializer. Functions and aliases may not have common
linkage.</dd>
<tt>common</tt> symbols may not have an explicit section,
must have a zero initializer, and may not be marked '<a
href="#globalvars"><tt>constant</tt></a>'. Functions and aliases may not
have common linkage.</dd>
<dt><tt><b><a name="linkage_appending">appending</a></b></tt>: </dt>

View File

@ -378,11 +378,14 @@ void Verifier::visitGlobalVariable(GlobalVariable &GV) {
"Global variable initializer type does not match global "
"variable type!", &GV);
// If the global has common linkage, it must have a zero initializer.
if (GV.hasCommonLinkage())
// If the global has common linkage, it must have a zero initializer and
// cannot be constant.
if (GV.hasCommonLinkage()) {
Assert1(GV.getInitializer()->isNullValue(),
"'common' global must have a zero initializer!", &GV);
Assert1(!GV.isConstant(), "'common' global may not be marked constant!",
&GV);
}
// Verify that any metadata used in a global initializer points only to
// other globals.