https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108231

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Summary|malloc attribute vs extern  |malloc and cleanup
                   |"C" in a namespace and      |attributes vs extern "C" in
                   |global and using of one in  |a namespace and global and
                   |the namespace in the global |using of one in the
                   |one and the builtin free    |namespace in the global one
                   |                            |and the builtin free

--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Here is another example of the same issue but with cleanup attribute instead:
```
namespace std {
extern "C" int printf (const char*, ...);
}
using std::printf;
extern "C" int printf (const char*, ...);
void foo (const char *) { printf ("%s\n", __PRETTY_FUNCTION__); }

void bar () {
    const char a __attribute__ ((cleanup (printf))) = 0;
    printf ("%s calling ", __PRETTY_FUNCTION__);
    foo (&a);
    printf ("cleanup calling ");
}

int main ()
{
    bar ();
}
```

Note if you order swap the order of declarations of printf it works.
Same with free in the original testcase for malloc.

Reply via email to