This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

need help with builtin function prototypes


Could someone provide a hint for me?  I'm trying to put in "real"
prototypes for a builtin function where the arguments don't follow the
default promotion rules.  Specifically, one of the arguments is a
reference type (like C++'s "int&").  However, I'm bumping into two
problems:

1. The compiler emits a compatibility warning:

dj.c:4: warning: incompatible implicit declaration of built-in function 'mep_and'

2. The compiler seems to be using the implicit declaration instead of
   the builtin one, resulting in the builtin's arguments being
   incorrect, especially when optimizing:

dj.c:4: error: non-lvalue passed to argument 1 of `mep_and'

Is there a trick to this?  I need this type of functionality because
some builtins modify multiple values, so a simple return value is
insufficient, plus this worked with older versions of gcc so our users
are used to it syntax-wise.

Parameters:

 <reference_type 0xb7ee3680
    type <integer_type 0xb7e922d8 int public SI
        size <integer_cst 0xb7e82228 constant invariant 32>
        unit size <integer_cst 0xb7e82060 constant invariant 4>
        align 32 symtab 0 alias set -1 canonical type 0xb7e922d8 precision 32 min <integer_cst 0xb7e821e0 -2147483648> max <integer_cst 0xb7e821f8 2147483647>
        pointer_to_this <pointer_type 0xb7e9b9c0> reference_to_this <reference_type 0xb7ee3680>>
    unsigned SI size <integer_cst 0xb7e82228 32> unit size <integer_cst 0xb7e82060 4>
    align 32 symtab 0 alias set -1 canonical type 0xb7ee3680>

 <integer_type 0xb7e922d8 int public SI
    size <integer_cst 0xb7e82228 type <integer_type 0xb7e92068 bit_size_type> constant invariant 32>
    unit size <integer_cst 0xb7e82060 type <integer_type 0xb7e92000 unsigned int> constant invariant 4>
    align 32 symtab 0 alias set -1 canonical type 0xb7e922d8 precision 32 min <integer_cst 0xb7e821e0 -2147483648> max <integer_cst 0xb7e821f8 2147483647>
    pointer_to_this <pointer_type 0xb7e9b9c0>>

Implicit function:

 <function_type 0xb7eec618
    type <integer_type 0xb7ee02d8 int public SI
        size <integer_cst 0xb7ed0228 constant invariant 32>
        unit size <integer_cst 0xb7ed0060 constant invariant 4>
        align 32 symtab 0 alias set -1 canonical type 0xb7ee02d8 precision 32 min <integer_cst 0xb7ed01e0 -2147483648> max <integer_cst 0xb7ed01f8 2147483647>
        pointer_to_this <pointer_type 0xb7ee99c0> reference_to_this <reference_type 0xb7f31680>>
    HI
    size <integer_cst 0xb7ed0198 type <integer_type 0xb7ee0068 bit_size_type> constant invariant 16>
    unit size <integer_cst 0xb7ed01b0 type <integer_type 0xb7ee0000 unsigned int> constant invariant 2>
    align 16 symtab 0 alias set -1 structural equality>

Explicit function:

 <function_type 0xb7f316e8
    type <void_type 0xb7ee95b0 void VOID
        align 8 symtab 0 alias set -1 canonical type 0xb7ee95b0
        pointer_to_this <pointer_type 0xb7ee9618>>
    HI
    size <integer_cst 0xb7ed0198 type <integer_type 0xb7ee0068 bit_size_type> constant invariant 16>
    unit size <integer_cst 0xb7ed01b0 type <integer_type 0xb7ee0000 unsigned int> constant invariant 2>
    align 16 symtab 0 alias set -1 structural equality
    arg-types <tree_list 0xb7f34870
        value <reference_type 0xb7f31680 type <integer_type 0xb7ee02d8 int>
            unsigned SI
            size <integer_cst 0xb7ed0228 constant invariant 32>
            unit size <integer_cst 0xb7ed0060 constant invariant 4>
            align 32 symtab 0 alias set -1 canonical type 0xb7f31680>
        chain <tree_list 0xb7f34858 value <integer_type 0xb7ee02d8 int>>>>


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]