Project

General

Profile

Actions

Bug #5280

closed

C backend generates artificial structure declarators (field declarators) for unnamed structures and unions

Added by Vadim Mutilin over 9 years ago. Updated over 9 years ago.

Status:
Closed
Priority:
High
Category:
-
Start date:
09/19/2014
Due date:
% Done:

0%

Estimated time:
Detected in build:
old
Platform:
Published in build:

Description

The linker successfully process this issues, but it causes problems for static analysis tools with linking several files as far as the input files contain different generated field names for the same struct type name.

For CPAchecker it looks like

Error: Parsing failed (Cannot access field ldv_7819 in struct lockref in file btmrvl_debugfs_o_i in line 13373: ( * dentry ) . d_lockref . ldv_7819 (full line is return ( unsigned int ) ( * dentry ) . d_lockref . ldv_7819 . ldv_7818 . count;)) (EclipseCParser.buildCFA, SEVERE)

Example
LDV Tools f50982e, CPAchecker r13530 no_cil 
linux-3.17-rc1.tar.xz    32_7a drivers/bluetooth/btmrvl.ko    ldv_main1_sequence_infinite_withcheck_stateful

btmrvl_main.o.i:

struct lockref
{
# 33 "include/linux/lockref.h" 
  union
  {
# 32 "include/linux/lockref.h" 
    struct
    {
# 30 "include/linux/lockref.h" 
      spinlock_t lock;
      unsigned int count;
    } ldv_16557;
  } ldv_16558;
};

btmrvl_debugfs.o.i:

struct lockref
{
# 33 "include/linux/lockref.h" 
  union
  {
# 32 "include/linux/lockref.h" 
    struct
    {
# 30 "include/linux/lockref.h" 
      spinlock_t lock;
      unsigned int count;
    } ldv_7818;
  } ldv_7819;
};


Related issues 1 (0 open1 closed)

Related to C Instrumentation Framework - Bug #11464: C back-end incorrectly handles initialization of anonymous unionsClosedEvgeny Novikov03/05/2022

Actions
Actions #1

Updated by Vadim Mutilin over 9 years ago

See ticket 161 in CPAchecker project

Actions #2

Updated by Evgeny Novikov over 9 years ago

  • Status changed from New to Open
  • Assignee set to Evgeny Novikov

It can be a duplicate of #1138, but I am not sure.

Actions #3

Updated by Evgeny Novikov over 9 years ago

  • Priority changed from Normal to High
Actions #4

Updated by Evgeny Novikov over 9 years ago

  • Tracker changed from Feature to Bug
  • Subject changed from C backend generates new names for unnamed structures and unions to C backend generates artificial structure declarators (field declarators) for unnamed structures and unions
  • Detected in build set to old

It is worth mentioning that GCC supports empty structure declarator lists while C-backend doesn't support them and this was the source of the given issue:

struct-declaration:
    specifier-qualifier-list struct-declarator-list ;

GNU extensions:

struct-declaration:
    specifier-qualifier-list

Actions #5

Updated by Evgeny Novikov over 9 years ago

  • Status changed from Open to Resolved

Fixed in 2c42610 (besides I had to fix accesses and initialization of these unnamed fields). Please, test it during a week and close the issue if everything will work!

Actions #6

Updated by Vadim Mutilin over 9 years ago

works on drivers/bluetooth/btmrvl.ko! thanks

Actions #7

Updated by Vadim Mutilin over 9 years ago

  • Status changed from Resolved to Closed

works on modules

Actions #8

Updated by Evgeny Novikov about 2 years ago

  • Related to Bug #11464: C back-end incorrectly handles initialization of anonymous unions added
Actions

Also available in: Atom PDF