Viewing Issue Simple Details Jump to Notes ] View Advanced ] Issue History ] Print ]
ID Category Severity Reproducibility Date Submitted Last Update
0000035 [cparser] other major always 2009-02-05 01:16 2009-05-15 16:51
Reporter Matze View Status public  
Assigned To Matze
Priority normal Resolution fixed  
Status closed   Product Version 0.9.8
Summary 0000035: cparser constant folding fails on big long long constants
Description Hello Matthias Braun,

yesterday I downloaded and compiled your wunderful cparser and,
well, you might be happy to hear about a small bug.
(or in libfirm?)

version: cparser-0.9.8, libfirm-1.16.0,
compiled with gcc 4.03, self compiled but gcc testsuite passed.
also used: Intel icc 9.0, platform: Debian Linux

Please have a look to the file ex_panic_ull.c in attachment
and test it with:
cparser -DONE -Wall -c ex_panic_ull.c
--> Panic: result of constant folding is not integer
cparser -DTWO -Wall -c ex_panic_ull.c
--> OK

Please let me know if you need further informations.

Bye,
Gruesse nach Karlsruhe,
Additional Information I looked into it:

cparsers constant folding produces values in a long variable (in the compiler). Unfortunately you can construct constants bigger than a long. Seems we can't use any integer types for constant folding, but have to operate with tarvals inside cparser.
Tags No tags attached.
Attached Files c file icon ex_panic_ull.c [^] (1,538 bytes) 2009-02-05 01:16

- Relationships

-  Notes
(0000052)
Matze (administrator)
2009-02-05 01:17

Reduced testcase:

int main(void)
{ return 0x1fffffffffffffffULL ? 0 : 42; }
(0000053)
Matze (administrator)
2009-02-05 01:19

Interestingly this works nicely with 0xffffffffffffffffULL which cparser internally happily converts to a -1 long (which is probably not what we really want).
(0000060)
Matze (administrator)
2009-03-03 21:14

I just had another idea, we could create multiple fold_const functions. 1 that returns the result as a long (this should be fine for array indices and switches) and 1 that returns true/false in the case of non-zero/zero values (this should be fine for if, ?:), the 3rd case would return an ir_Const node (should be fine for initializer).
When I didn't miss something this should be enough to cover all cases without the need to fiddle around with tarvals in cparser.
(0000072)
Matze (administrator)
2009-03-08 01:22

fixed in r25630 as described in last comment.

- Issue History
Date Modified Username Field Change
2009-02-05 01:16 Matze New Issue
2009-02-05 01:16 Matze File Added: ex_panic_ull.c
2009-02-05 01:17 Matze Note Added: 0000052
2009-02-05 01:19 Matze Note Added: 0000053
2009-02-05 01:19 Matze Issue Monitored: Matze
2009-02-05 01:20 Matze Issue End Monitor: Matze
2009-02-05 01:23 Matze Additional Information Updated
2009-02-19 20:33 Tron Status new => confirmed
2009-03-03 21:14 Matze Note Added: 0000060
2009-03-08 01:22 Matze Note Added: 0000072
2009-03-08 01:22 Matze Assigned To => Matze
2009-03-08 01:22 Matze Status confirmed => resolved
2009-03-08 01:22 Matze Resolution open => fixed
2009-05-15 16:51 Matze Status resolved => closed


Mantis 1.1.5[^]
Copyright © 2000 - 2008 Mantis Group
Powered by Mantis Bugtracker