File tree 3 files changed +33
-3
lines changed
regression/cbmc/ts18661_typedefs
3 files changed +33
-3
lines changed Original file line number Diff line number Diff line change
1
+ typedef float _Float32 ;
2
+ typedef double _Float32x ;
3
+ typedef double _Float64 ;
4
+ typedef long double _Float64x ;
5
+ typedef long double _Float128 ;
6
+ typedef long double _Float128x ;
7
+
8
+ int main (int argc , char * * argv ) {
9
+ }
Original file line number Diff line number Diff line change
1
+ CORE
2
+ main.c
3
+
4
+ ^EXIT=0$
5
+ ^SIGNAL=0$
6
+ ^VERIFICATION SUCCESSFUL$
7
+ --
8
+ ^warning: ignoring
Original file line number Diff line number Diff line change @@ -344,9 +344,22 @@ void ansi_c_convert_typet::write(typet &type)
344
344
gcc_float64_cnt+gcc_float64x_cnt+
345
345
gcc_float128_cnt+gcc_float128x_cnt>=2 )
346
346
{
347
- error ().source_location =source_location;
348
- error () << " conflicting type modifiers" << eom;
349
- throw 0 ;
347
+ // Temporary workaround for our glibc versions that try to define TS 18661
348
+ // types (for example, typedef float _Float32). This can be removed once
349
+ // upgrade cbmc's GCC support to at least 7.0 (when glibc will expect us
350
+ // to provide these types natively), or disable parsing them ourselves
351
+ // when our preprocessor stage claims support <7.0.
352
+ if (c_storage_spec.is_typedef )
353
+ {
354
+ warning ().source_location = source_location;
355
+ warning () << " ignoring typedef for TS 18661 (_FloatNNx) type. If you need these, try using goto-cc instead." << eom;
356
+ }
357
+ else
358
+ {
359
+ error ().source_location =source_location;
360
+ error () << " conflicting type modifiers" << eom;
361
+ throw 0 ;
362
+ }
350
363
}
351
364
352
365
// _not_ the same as float, double, long double
You can’t perform that action at this time.
0 commit comments