public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/98992] New: attribute malloc error associating a member deallocator with an allocator
@ 2021-02-07 23:20 msebor at gcc dot gnu.org
  2022-06-24 11:40 ` [Bug c++/98992] " rdiezmail-gcc at yahoo dot de
  2023-08-22 21:11 ` pinskia at gcc dot gnu.org
  0 siblings, 2 replies; 3+ messages in thread
From: msebor at gcc dot gnu.org @ 2021-02-07 23:20 UTC (permalink / raw)
  To: gcc-bugs

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

            Bug ID: 98992
           Summary: attribute malloc error associating a member
                    deallocator with an allocator
           Product: gcc
           Version: 11.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: msebor at gcc dot gnu.org
  Target Milestone: ---

The new attribute malloc is rejected on declarations of member function:

$ cat t.C && /build/gcc-master/gcc/xg++ -B /build/gcc-master/gcc -S -Wall t.C
struct A
{
  void dealloc (void*);

  __attribute__ ((malloc (dealloc))) 
  void* alloc ();
};
t.C:6:16: error: ‘malloc’ attribute argument 1 does not name a function
    6 |   void* alloc ();
      |                ^


The attribute handler is prepared for FUNCTION_DECL and OVERLOAD but not for
how a member function is represented here:

 <component_ref 0x7fffea969930
    type <lang_type 0x7fffea9532a0 unknown type type <lang_type 0x7fffea9532a0
unknown type>
        VOID
        align:1 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type
0x7fffea9532a0
        pointer_to_this <lang_type 0x7fffea9532a0 unknown type>
reference_to_this <lang_type 0x7fffea9532a0 unknown type>>

    arg:0 <indirect_ref 0x7fffea9549c0
        type <record_type 0x7fffea96a000 S cxx-odr-p type_1 type_5 VOID
            align:8 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type
0x7fffea96a000 fields <function_decl 0x7fffea96d000 m_dealloc> context
<translation_unit_decl 0x7fffea805168 /build/tmp/t.C>
            full-name "struct S"
            n_parents=0 use_template=0 interface-unknown
            pointer_to_this <pointer_type 0x7fffea96a150> chain <type_decl
0x7fffea8248e8 S>>

        arg:0 <convert_expr 0x7fffea9549a0 type <pointer_type 0x7fffea96a150>
            constant
            arg:0 <void_cst 0x7fffea809b50 type <void_type 0x7fffea815f18 void>
                constant>>>
    arg:1 <baselink 0x7fffea969900
        type <method_type 0x7fffea96a690 type <void_type 0x7fffea815f18 void>
            QI
            size <integer_cst 0x7fffea7f7fa8 constant 8>
            unit-size <integer_cst 0x7fffea7f7fc0 constant 1>
            align:8 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type
0x7fffea96a690 method basetype <record_type 0x7fffea96a000 S>
            arg-types <tree_list 0x7fffea955f28 value <pointer_type
0x7fffea96a150>
                chain <tree_list 0x7fffea955f00 value <pointer_type
0x7fffea81fc78>
                    chain <tree_list 0x7fffea80b8e8 value <void_type
0x7fffea815f18 void>>>>>

        functions <function_decl 0x7fffea96d000 m_dealloc type <method_type
0x7fffea96a690>
            used public private external decl_3 QI /build/tmp/t.C:8:8 align:16
warn_if_not_align:0 context <record_type 0x7fffea96a000 S>
            full-name "void S::m_dealloc(char*)" chain <function_decl
0x7fffea95af00 __dt >>
        binfo <tree_binfo 0x7fffea95e420 type <record_type 0x7fffea96a000 S>
            public private bases:0 offset <integer_cst 0x7fffea7f7ee8 0>>
access_binfo <tree_binfo 0x7fffea95e420>>
    /build/tmp/t.C:9:27 start: /build/tmp/t.C:9:27 finish: /build/tmp/t.C:9:35>

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [Bug c++/98992] attribute malloc error associating a member deallocator with an allocator
  2021-02-07 23:20 [Bug c++/98992] New: attribute malloc error associating a member deallocator with an allocator msebor at gcc dot gnu.org
@ 2022-06-24 11:40 ` rdiezmail-gcc at yahoo dot de
  2023-08-22 21:11 ` pinskia at gcc dot gnu.org
  1 sibling, 0 replies; 3+ messages in thread
From: rdiezmail-gcc at yahoo dot de @ 2022-06-24 11:40 UTC (permalink / raw)
  To: gcc-bugs

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

R. Diez <rdiezmail-gcc at yahoo dot de> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |rdiezmail-gcc at yahoo dot de

--- Comment #1 from R. Diez <rdiezmail-gcc at yahoo dot de> ---
I have been using the following up to GCC 11.3:

struct MyClass
{
  static void FreeMemory ( const void * pMem ) throw();

  #if __GNUC_PREREQ(11, 0)
    __attribute__ (( malloc, malloc( MyClass::FreeMemory, 1 ) ))
  #else
    __attribute__ (( malloc ))
  #endif

  static void * AllocMemory ( size_t Size ) throw();

  [...]
};

However, GCC 12.1 does not want to accept it anymore:

error: 'malloc' attribute argument 1 does not name a function

I tried placing the attribute outside the class, like this:

__attribute__ (( malloc, malloc( MyClass::FreeMemory, 1 ) ))
void * MyClass::AllocMemory ( size_t Size ) throw()
{
  return malloc( Size );
}

But then I got 2 errors:

error: 'static void MyClass::FreeMemory(const void*)' is protected within this
context
  710 | __attribute__ (( malloc, malloc( MyClass::FreeMemory, 1 ) ))
      |                                           ^~~~~~~~~~

error: 'malloc' attribute argument 1 does not name a function

That cannot be right. GCC should not insist that the deallocator is public.
After all, the allocator AllocMemory is not public.

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [Bug c++/98992] attribute malloc error associating a member deallocator with an allocator
  2021-02-07 23:20 [Bug c++/98992] New: attribute malloc error associating a member deallocator with an allocator msebor at gcc dot gnu.org
  2022-06-24 11:40 ` [Bug c++/98992] " rdiezmail-gcc at yahoo dot de
@ 2023-08-22 21:11 ` pinskia at gcc dot gnu.org
  1 sibling, 0 replies; 3+ messages in thread
From: pinskia at gcc dot gnu.org @ 2023-08-22 21:11 UTC (permalink / raw)
  To: gcc-bugs

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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |thiago at kde dot org

--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
*** Bug 111105 has been marked as a duplicate of this bug. ***

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2023-08-22 21:11 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-02-07 23:20 [Bug c++/98992] New: attribute malloc error associating a member deallocator with an allocator msebor at gcc dot gnu.org
2022-06-24 11:40 ` [Bug c++/98992] " rdiezmail-gcc at yahoo dot de
2023-08-22 21:11 ` pinskia at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).