1 /* Reduced from qemu-7.2.0's hw/intc/omap_intc.c */
3 /* { dg-additional-options "-Wno-analyzer-symbol-too-complex" } */
5 #include "../../gcc.dg/analyzer/analyzer-decls.h"
7 typedef unsigned char __uint8_t
;
8 typedef unsigned int __uint32_t
;
9 typedef unsigned long int __uint64_t
;
10 typedef __uint8_t
uint8_t;
11 typedef __uint32_t
uint32_t;
12 typedef __uint64_t
uint64_t;
13 typedef uint64_t hwaddr
;
14 typedef struct omap_intr_handler_s omap_intr_handler
;
16 struct omap_intr_handler_bank_s
24 unsigned char priority
[32];
27 struct omap_intr_handler_s
35 struct omap_intr_handler_bank_s bank
[3];
39 omap2_inth_read(struct omap_intr_handler_s
* s
, int offset
)
42 struct omap_intr_handler_bank_s
* bank
= NULL
;
44 if ((offset
& 0xf80) == 0x80) {
45 bank_no
= (offset
& 0x60) >> 5;
46 if (bank_no
< s
->nbanks
) {
48 bank
= &s
->bank
[bank_no
];
56 return (s
->autoidle
>> 2) & 1;
62 return s
->sir_intr
[0];
65 return s
->sir_intr
[1];
68 return (!s
->mask
) << 2;
74 return s
->autoidle
& 3;
77 return bank
->inputs
; /* { dg-bogus "dereference of NULL 'bank'" "PR analyzer/108806" } */
80 return bank
->mask
; /* { dg-bogus "dereference of NULL 'bank'" "PR analyzer/108806" } */
87 return bank
->swi
; /* { dg-bogus "dereference of NULL 'bank'" "PR analyzer/108806" } */
93 return bank
->irqs
& ~bank
->mask
& ~bank
->fiq
; /* { dg-bogus "dereference of NULL 'bank'" "PR analyzer/108806" } */
96 return bank
->irqs
& ~bank
->mask
& bank
->fiq
; /* { dg-bogus "dereference of NULL 'bank'" "PR analyzer/108806" } */
99 bank_no
= (offset
- 0x100) >> 7;
100 if (bank_no
> s
->nbanks
)
102 bank
= &s
->bank
[bank_no
];
103 line_no
= (offset
& 0x7f) >> 2;
104 return (bank
->priority
[line_no
] << 2) | ((bank
->fiq
>> line_no
) & 1);