Skip to content

goto-instrument: function pointer typedefs #972

Closed
@stahlbauer

Description

@stahlbauer

Function pointer types are not translated correctly by the current version of goto-instrument:

Input: typedef void (*__sighandler_t) (int);

Output: typedef void (*)(signed int) __sighandler_t;

GCC error:

error: expected identifier or ‘(’ before ‘)’ token
 typedef void (*)(signed int) __sighandler_t;

Full example for regression checks:

extern void* memset(void *, int, unsigned long);

typedef void (*__sighandler_t) (int);

typedef __sighandler_t sighandler_t;

typedef struct siginfo {                                                        
    int si_signo;                                                               
} siginfo_t;

struct sigaction {
	union {
	  __sighandler_t _sa_handler;
	  void (*_sa_sigaction)(int, struct siginfo *, void *);
	} _u;
};

#define sa_sigaction	_u._sa_sigaction
#define sa_handler	_u._sa_handler

static void askpass_timeout(signed int ignore) {
  ;
}

int main() {
  struct sigaction sa, oldsa;
  memset(&sa, 0, sizeof(sa));
  sa.sa_handler = askpass_timeout;    
  return 0;
}

@tautschnig: FYI

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions