[llvm-commits] [llvm] r137134 - in /llvm/trunk: lib/Target/CBackend/CBackend.cpp test/CodeGen/CBackend/pr10081.ll

Eli Friedman eli.friedman at gmail.com
Tue Aug 9 11:44:15 PDT 2011


On Tue, Aug 9, 2011 at 11:31 AM, Bill Wendling <isanbard at gmail.com> wrote:
> Author: void
> Date: Tue Aug  9 13:31:50 2011
> New Revision: 137134
>
> URL: http://llvm.org/viewvc/llvm-project?rev=137134&view=rev
> Log:
> Print out the variable declaration only if it is a declaration. Otherwise, a
> 'static' variable will be emitted twice.
> PR10081
>
> Added:
>    llvm/trunk/test/CodeGen/CBackend/pr10081.ll
> Modified:
>    llvm/trunk/lib/Target/CBackend/CBackend.cpp
>
> Modified: llvm/trunk/lib/Target/CBackend/CBackend.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CBackend/CBackend.cpp?rev=137134&r1=137133&r2=137134&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/CBackend/CBackend.cpp (original)
> +++ llvm/trunk/lib/Target/CBackend/CBackend.cpp Tue Aug  9 13:31:50 2011
> @@ -1817,7 +1817,7 @@
>     Out << "\n\n/* Global Variable Declarations */\n";
>     for (Module::global_iterator I = M.global_begin(), E = M.global_end();
>          I != E; ++I)
> -      if (!I->isDeclaration()) {
> +      if (I->isDeclaration()) {
>         // Ignore special globals, such as debug info.
>         if (getGlobalVariableClass(I))
>           continue;

I'm pretty sure the original code was correct... and works as long as
you don't try to compile the output of the C backend as C++.  Consider
something like the following C code:
static void* x;
static void* y = &x;
static void* x = &y;
void* z = &y;

-Eli




More information about the llvm-commits mailing list