http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59281

            Bug ID: 59281
           Summary: attribute((constructor)) accepts enum class as integer
                    constant
           Product: gcc
           Version: 4.9.0
            Status: UNCONFIRMED
          Keywords: accepts-invalid
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: glisse at gcc dot gnu.org

enum class E : int { prio = 666 };
void f (int) __attribute__((constructor(E::prio)));

is accepted with -std=c++11 whereas the conversion should require an explicit
cast. default_conversion -> decay_conversion -> decl_constant_value_safe
returns:
<integer_cst 0x7ffff662efc0 type <enumeral_type 0x7ffff6624b28 E> constant 666>
and we then accept any integer_cst.

The example comes from PR 59211.

Reply via email to