[Lldb-commits] [lldb] 2ce889f - [lldb][NFC] Add size tests for empty records with alignment and with empty members

Shafik Yaghmour via lldb-commits lldb-commits at lists.llvm.org
Mon Aug 30 13:57:08 PDT 2021


Interesting to note that zero sized arrays are an extension, so are empty structs which require a diagnostic in C but are well-formed C++. It is unfortunate that we have divergence in that extension. 

> On Aug 30, 2021, at 7:38 AM, Raphael Isemann via lldb-commits <lldb-commits at lists.llvm.org> wrote:
> 
> 
> Author: Raphael Isemann
> Date: 2021-08-30T16:38:13+02:00
> New Revision: 2ce889fa4e5cab75fc65d03a4dfae52784d57db9
> 
> URL: https://github.com/llvm/llvm-project/commit/2ce889fa4e5cab75fc65d03a4dfae52784d57db9
> DIFF: https://github.com/llvm/llvm-project/commit/2ce889fa4e5cab75fc65d03a4dfae52784d57db9.diff
> 
> LOG: [lldb][NFC] Add size tests for empty records with alignment and with empty members
> 
> This came up during the Windows bot failure discussing after D105471 . See
> also 3d9a9fa6911a5228ce799a7c639e94d322678934 .
> 
> Added: 
> 
> 
> Modified: 
>    lldb/test/API/lang/c/sizeof/TestCSizeof.py
>    lldb/test/API/lang/c/sizeof/main.c
>    lldb/test/API/lang/cpp/sizeof/TestCPPSizeof.py
>    lldb/test/API/lang/cpp/sizeof/main.cpp
> 
> Removed: 
> 
> 
> 
> ################################################################################
> diff  --git a/lldb/test/API/lang/c/sizeof/TestCSizeof.py b/lldb/test/API/lang/c/sizeof/TestCSizeof.py
> index 5bcbc42e3dfcf..67766833623db 100644
> --- a/lldb/test/API/lang/c/sizeof/TestCSizeof.py
> +++ b/lldb/test/API/lang/c/sizeof/TestCSizeof.py
> @@ -14,5 +14,6 @@ def test(self):
>         # Empty structs are not allowed in C, but Clang/GCC allow them and
>         # give them a size of 0.
>         self.expect_expr("sizeof(Empty) == sizeof_empty", result_value="true")
> +        self.expect_expr("sizeof(EmptyMember) == sizeof_empty_member", result_value="true")
>         self.expect_expr("sizeof(SingleMember) == sizeof_single", result_value="true")
>         self.expect_expr("sizeof(PaddingMember) == sizeof_padding", result_value="true")
> 
> diff  --git a/lldb/test/API/lang/c/sizeof/main.c b/lldb/test/API/lang/c/sizeof/main.c
> index 08bf906edb4af..fa7bd2d46b1a9 100644
> --- a/lldb/test/API/lang/c/sizeof/main.c
> +++ b/lldb/test/API/lang/c/sizeof/main.c
> @@ -1,4 +1,7 @@
> struct Empty {};
> +struct EmptyMember {
> +  char i[0];
> +};
> struct SingleMember {
>   int i;
> };
> @@ -9,13 +12,15 @@ struct PaddingMember {
> };
> 
> const unsigned sizeof_empty = sizeof(struct Empty);
> +const unsigned sizeof_empty_member = sizeof(struct EmptyMember);
> const unsigned sizeof_single = sizeof(struct SingleMember);
> const unsigned sizeof_padding = sizeof(struct PaddingMember);
> 
> int main() {
>   struct Empty empty;
> +  struct EmptyMember empty_member;
>   struct SingleMember single;
>   struct PaddingMember padding;
>   // Make sure globals are used.
> -  return sizeof_empty + sizeof_single + sizeof_padding;
> +  return sizeof_empty + sizeof_empty_member + sizeof_single + sizeof_padding;
> }
> 
> diff  --git a/lldb/test/API/lang/cpp/sizeof/TestCPPSizeof.py b/lldb/test/API/lang/cpp/sizeof/TestCPPSizeof.py
> index c6b54de349470..e7f4623ee91f2 100644
> --- a/lldb/test/API/lang/cpp/sizeof/TestCPPSizeof.py
> +++ b/lldb/test/API/lang/cpp/sizeof/TestCPPSizeof.py
> @@ -14,6 +14,10 @@ def test(self):
>         # Empty structs/classes have size 1 in C++.
>         self.expect_expr("sizeof(Empty) == sizeof_empty", result_value="true")
>         self.expect_expr("sizeof(EmptyClass) == sizeof_empty_class", result_value="true")
> +        self.expect_expr("sizeof(EmptyClassAligned) == sizeof_empty_class_aligned",
> +                         result_value="true")
> +        self.expect_expr("sizeof(ClassEmptyMember) == sizeof_class_empty_member",
> +                         result_value="true")
>         self.expect_expr("sizeof(SingleMember) == sizeof_single", result_value="true")
>         self.expect_expr("sizeof(SingleMemberClass) == sizeof_single_class", result_value="true")
>         self.expect_expr("sizeof(PaddingMember) == sizeof_padding", result_value="true")
> 
> diff  --git a/lldb/test/API/lang/cpp/sizeof/main.cpp b/lldb/test/API/lang/cpp/sizeof/main.cpp
> index 6c4da06cbef85..4a7a89a1307fd 100644
> --- a/lldb/test/API/lang/cpp/sizeof/main.cpp
> +++ b/lldb/test/API/lang/cpp/sizeof/main.cpp
> @@ -1,5 +1,9 @@
> struct Empty {};
> class EmptyClass {};
> +class alignas(4) EmptyClassAligned {};
> +class ClassEmptyMember {
> +  int i[0];
> +};
> 
> struct SingleMember {
>   int i;
> @@ -19,6 +23,8 @@ class PaddingMemberClass {
> 
> const unsigned sizeof_empty = sizeof(Empty);
> const unsigned sizeof_empty_class = sizeof(EmptyClass);
> +const unsigned sizeof_empty_class_aligned = sizeof(EmptyClassAligned);
> +const unsigned sizeof_class_empty_member = sizeof(ClassEmptyMember);
> const unsigned sizeof_single = sizeof(SingleMember);
> const unsigned sizeof_single_class = sizeof(SingleMemberClass);
> const unsigned sizeof_padding = sizeof(PaddingMember);
> @@ -27,11 +33,14 @@ const unsigned sizeof_padding_class = sizeof(PaddingMemberClass);
> int main() {
>   Empty empty;
>   EmptyClass empty_class;
> +  EmptyClassAligned empty_class_aligned;
> +  ClassEmptyMember class_empty_member;
>   SingleMember single;
>   SingleMemberClass single_class;
>   PaddingMember padding;
>   PaddingMemberClass padding_class;
>   // Make sure globals are used.
> -  return sizeof_empty + sizeof_empty_class + sizeof_single +
> -    sizeof_single_class + sizeof_padding + sizeof_padding_class;
> +  return sizeof_empty + sizeof_empty_class + sizeof_class_empty_member +
> +         sizeof_single + +sizeof_empty_class_aligned + sizeof_single_class +
> +         sizeof_padding + sizeof_padding_class;
> }
> 
> 
> 
> _______________________________________________
> lldb-commits mailing list
> lldb-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits



More information about the lldb-commits mailing list