From 5ca741056dc2488d7921499fe53ce58f0b23cf65 Mon Sep 17 00:00:00 2001 From: Daniel Kroening Date: Sat, 26 May 2018 17:13:01 +0100 Subject: [PATCH] ignore size of arrays on ptr-to-array conversions --- regression/ansi-c/Function_pointer1/conversion.c | 8 ++++++++ regression/ansi-c/Function_pointer1/test_conversion.desc | 8 ++++++++ src/ansi-c/c_typecast.cpp | 7 +++++++ 3 files changed, 23 insertions(+) create mode 100644 regression/ansi-c/Function_pointer1/conversion.c create mode 100644 regression/ansi-c/Function_pointer1/test_conversion.desc diff --git a/regression/ansi-c/Function_pointer1/conversion.c b/regression/ansi-c/Function_pointer1/conversion.c new file mode 100644 index 0000000000..8fbd6ad491 --- /dev/null +++ b/regression/ansi-c/Function_pointer1/conversion.c @@ -0,0 +1,8 @@ +int (*ptr2)[2]; +int (*ptrX)[]; + +int main() +{ + ptrX=ptr2; + ptr2=ptrX; +} diff --git a/regression/ansi-c/Function_pointer1/test_conversion.desc b/regression/ansi-c/Function_pointer1/test_conversion.desc new file mode 100644 index 0000000000..752b82f0a5 --- /dev/null +++ b/regression/ansi-c/Function_pointer1/test_conversion.desc @@ -0,0 +1,8 @@ +CORE +conversion.c +--verbosity 3 +^EXIT=0$ +^SIGNAL=0$ +-- +incompatible pointer types +^CONVERSION ERROR$ diff --git a/src/ansi-c/c_typecast.cpp b/src/ansi-c/c_typecast.cpp index 4e0d2d31d0..5e74b34280 100644 --- a/src/ansi-c/c_typecast.cpp +++ b/src/ansi-c/c_typecast.cpp @@ -543,6 +543,13 @@ void c_typecastt::implicit_typecast_followed( // Also generous: between any to scalar types it's ok. // We should probably check the size. } + else if(src_sub.id()==ID_array && + dest_sub.id()==ID_array && + base_type_eq(src_sub.subtype(), dest_sub.subtype(), ns)) + { + // we ignore the size of the top-level array + // in the case of pointers to arrays + } else warnings.push_back("incompatible pointer types");