Skip to content

goto-instrument: anonymous structs in typedefs #964

Closed
@stahlbauer

Description

@stahlbauer

The problem is caused by not dumping names of anonymous structs in typedefs. Example:

Input for goto-cc:

#define UNUSED_PARAM __attribute__ ((__unused__))

#  define mbstate_t bb_mbstate_t
#  define wcrtomb   bb_wcrtomb

typedef struct {                
    char bogus;                 
} mbstate_t;

int wcrtomb(char *s, char wc, mbstate_t *ps);

int wcrtomb(char *s, char wc, mbstate_t *ps UNUSED_PARAM)
{
    return 1; 
}

int main() {
    wcrtomb("foo", 'Z', (void*)1);
    return 0;
}

Output of goto-instrument:

typedef struct bb_mbstate_t;

// tag-#anon#ST[S8'bogus']
// file example_collisions1.c line 6
struct anonymous;


// bb_wcrtomb
// file example_collisions1.c line 12
signed int bb_wcrtomb(char *s, char wc, bb_mbstate_t *ps);

typedef struct anonymous
{
  // bogus
  char bogus;
} bb_mbstate_t;


// bb_wcrtomb
// file example_collisions1.c line 12
signed int bb_wcrtomb(char *s, char wc, bb_mbstate_t *ps)
{
  return 1;
}

// main
// file example_collisions1.c line 17
signed int main()
{
  bb_wcrtomb("foo", 'Z', (bb_mbstate_t *)(void *)1);
  return 0;
}

GCC output:

error: unknown type name ‘bb_mbstate_t’
 signed int bb_wcrtomb(char *s, char wc, bb_mbstate_t *ps);

clang output:

example_collisions1.i:1:1: warning: typedef requires a name [-Wmissing-declarations]
typedef struct bb_mbstate_t;
^~~~~~~
example_collisions1.i:10:41: error: must use 'struct' tag to refer to type 'bb_mbstate_t'
signed int bb_wcrtomb(char *s, char wc, bb_mbstate_t *ps);
                                        ^
                                        struct 
example_collisions1.i:21:12: error: conflicting types for 'bb_wcrtomb'
signed int bb_wcrtomb(char *s, char wc, bb_mbstate_t *ps)

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