From cafb76e835b5a4d12edb251bff487afb680d870c Mon Sep 17 00:00:00 2001 From: Andre Maroneze <andre.maroneze@cea.fr> Date: Tue, 11 Jan 2022 14:58:27 +0100 Subject: [PATCH] [cabs2cil] improve some error message locations --- src/kernel_internals/typing/cabs2cil.ml | 11 ++++++----- .../oracle/struct_with_invalid_field.2.res.oracle | 2 +- .../oracle/struct_with_invalid_field.3.res.oracle | 2 +- .../oracle/struct_with_invalid_field.4.res.oracle | 2 +- tests/syntax/oracle/unnamed_bitfields.1.res.oracle | 2 +- tests/syntax/oracle/very_large_integers.0.res.oracle | 2 +- tests/value/library.i | 2 +- 7 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/kernel_internals/typing/cabs2cil.ml b/src/kernel_internals/typing/cabs2cil.ml index 63b72bb5aa3..f6aebe306d4 100644 --- a/src/kernel_internals/typing/cabs2cil.ml +++ b/src/kernel_internals/typing/cabs2cil.ml @@ -5503,28 +5503,29 @@ and makeCompType ghost (isstruct: bool) match widtho with | None -> None, ftype | Some w -> begin + let source = fst w.expr_loc in (match unrollType ftype with | TInt (_, _) -> () | TEnum _ -> () | _ -> - Kernel.abort ~once:true ~current:true + Kernel.abort ~once:true ~source "Base type for bitfield is not an integer type"); match isIntegerConstant ghost w with | None -> - Kernel.abort ~current:true + Kernel.abort ~source "bitfield width is not a valid integer constant"; | Some s as w -> begin if s < 0 then - Kernel.abort ~current:true "negative bitfield width (%d)" s; + Kernel.abort ~source "negative bitfield width (%d)" s; try if s > Cil.bitsSizeOf ftype then - Kernel.error ~current:true + Kernel.error ~source "bitfield width (%d) exceeds its type (%a, %d bits)" s Cil_printer.pp_typ ftype (Cil.bitsSizeOf ftype) with SizeOfError _ -> - Kernel.fatal ~current:true + Kernel.fatal ~source "Unable to compute size of %a" Cil_printer.pp_typ ftype end; let ftype = diff --git a/tests/syntax/oracle/struct_with_invalid_field.2.res.oracle b/tests/syntax/oracle/struct_with_invalid_field.2.res.oracle index 44f758c2e5d..74ab8ae4929 100644 --- a/tests/syntax/oracle/struct_with_invalid_field.2.res.oracle +++ b/tests/syntax/oracle/struct_with_invalid_field.2.res.oracle @@ -1,5 +1,5 @@ [kernel] Parsing struct_with_invalid_field.c (with preprocessing) -[kernel] struct_with_invalid_field.c:18: User Error: +[kernel] struct_with_invalid_field.c:21: User Error: negative bitfield width (-1) [kernel] User Error: stopping on file "struct_with_invalid_field.c" that has errors. Add '-kernel-msg-key pp' for preprocessing command. diff --git a/tests/syntax/oracle/struct_with_invalid_field.3.res.oracle b/tests/syntax/oracle/struct_with_invalid_field.3.res.oracle index b60db2046f2..9f48a481b14 100644 --- a/tests/syntax/oracle/struct_with_invalid_field.3.res.oracle +++ b/tests/syntax/oracle/struct_with_invalid_field.3.res.oracle @@ -1,5 +1,5 @@ [kernel] Parsing struct_with_invalid_field.c (with preprocessing) -[kernel] struct_with_invalid_field.c:18: User Error: +[kernel] struct_with_invalid_field.c:24: User Error: negative bitfield width (-2147483648) [kernel] User Error: stopping on file "struct_with_invalid_field.c" that has errors. Add '-kernel-msg-key pp' for preprocessing command. diff --git a/tests/syntax/oracle/struct_with_invalid_field.4.res.oracle b/tests/syntax/oracle/struct_with_invalid_field.4.res.oracle index 1e059811ea2..b1712e7f4e0 100644 --- a/tests/syntax/oracle/struct_with_invalid_field.4.res.oracle +++ b/tests/syntax/oracle/struct_with_invalid_field.4.res.oracle @@ -1,5 +1,5 @@ [kernel] Parsing struct_with_invalid_field.c (with preprocessing) -[kernel] struct_with_invalid_field.c:18: User Error: +[kernel] struct_with_invalid_field.c:27: User Error: named bitfield (d) with zero width [kernel] User Error: stopping on file "struct_with_invalid_field.c" that has errors. Add '-kernel-msg-key pp' for preprocessing command. diff --git a/tests/syntax/oracle/unnamed_bitfields.1.res.oracle b/tests/syntax/oracle/unnamed_bitfields.1.res.oracle index 6a2d6755f07..7e979a78da8 100644 --- a/tests/syntax/oracle/unnamed_bitfields.1.res.oracle +++ b/tests/syntax/oracle/unnamed_bitfields.1.res.oracle @@ -1,5 +1,5 @@ [kernel] Parsing unnamed_bitfields.c (with preprocessing) -[kernel] unnamed_bitfields.c:15: User Error: +[kernel] unnamed_bitfields.c:18: User Error: named bitfield (zero_with_name) with zero width [kernel] User Error: stopping on file "unnamed_bitfields.c" that has errors. Add '-kernel-msg-key pp' for preprocessing command. diff --git a/tests/syntax/oracle/very_large_integers.0.res.oracle b/tests/syntax/oracle/very_large_integers.0.res.oracle index 2d2a9cccb8a..1236cc7d725 100644 --- a/tests/syntax/oracle/very_large_integers.0.res.oracle +++ b/tests/syntax/oracle/very_large_integers.0.res.oracle @@ -1,7 +1,7 @@ [kernel] Parsing very_large_integers.c (with preprocessing) [kernel] very_large_integers.c:25: User Error: integer constant too large in expression (unsigned long long)999999999999999999 + 9999999999999999999 -[kernel] very_large_integers.c:25: User Error: +[kernel] very_large_integers.c:26: User Error: bitfield width is not a valid integer constant [kernel] User Error: stopping on file "very_large_integers.c" that has errors. Add '-kernel-msg-key pp' for preprocessing command. diff --git a/tests/value/library.i b/tests/value/library.i index 8a05e158746..a7de6191a45 100644 --- a/tests/value/library.i +++ b/tests/value/library.i @@ -60,7 +60,7 @@ void (*ff)(); struct { short bf1: 5; - short : 0; // 0-sized bitfield: do not attemp to initialize it + short : 0; // 0-sized bitfield: do not attempt to initialize it unsigned int control: 14, : 0; } s_bitfield; -- GitLab