diff options
Diffstat (limited to 'lib/Bitcode/NaCl/Writer/NaClValueEnumerator.cpp')
-rw-r--r-- | lib/Bitcode/NaCl/Writer/NaClValueEnumerator.cpp | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/lib/Bitcode/NaCl/Writer/NaClValueEnumerator.cpp b/lib/Bitcode/NaCl/Writer/NaClValueEnumerator.cpp index feb14cdb0c..393c5bc934 100644 --- a/lib/Bitcode/NaCl/Writer/NaClValueEnumerator.cpp +++ b/lib/Bitcode/NaCl/Writer/NaClValueEnumerator.cpp @@ -42,16 +42,21 @@ NaClValueEnumerator::NaClValueEnumerator(const Module *M) { // constructor completes. TypeCountMapType count_map; TypeCountMap = &count_map; - // Enumerate the global variables. - for (Module::const_global_iterator I = M->global_begin(), - E = M->global_end(); I != E; ++I) - EnumerateValue(I); - // Enumerate the functions. + // Enumerate the functions. Note: We do this before global + // variables, so that global variable initializations can refer to + // the functions without a forward reference. for (Module::const_iterator I = M->begin(), E = M->end(); I != E; ++I) { EnumerateValue(I); } + // Enumerate the global variables. + FirstGlobalVarID = Values.size(); + for (Module::const_global_iterator I = M->global_begin(), + E = M->global_end(); I != E; ++I) + EnumerateValue(I); + NumGlobalVarIDs = Values.size() - FirstGlobalVarID; + // Enumerate the aliases. for (Module::const_alias_iterator I = M->alias_begin(), E = M->alias_end(); I != E; ++I) @@ -60,11 +65,8 @@ NaClValueEnumerator::NaClValueEnumerator(const Module *M) { // Remember what is the cutoff between globalvalue's and other constants. unsigned FirstConstant = Values.size(); - // Enumerate the global variable initializers. - for (Module::const_global_iterator I = M->global_begin(), - E = M->global_end(); I != E; ++I) - if (I->hasInitializer()) - EnumerateValue(I->getInitializer()); + // Skip global variable initializers since they are handled within + // WriteGlobalVars of file NaClBitcodeWriter.cpp. // Enumerate the aliasees. for (Module::const_alias_iterator I = M->alias_begin(), E = M->alias_end(); |