xref: /llvm-project/clang/test/Layout/dump-complete.cpp (revision e4882d83d77f9d6a5198ecb7faabd5bf2ce4b730)
1 // RUN: %clang_cc1 -fsyntax-only -fdump-record-layouts-complete %s | FileCheck %s
2 
3 struct a {
4   int x;
5 };
6 
7 struct b {
8   char y;
9 } foo;
10 
11 class c {};
12 
13 class d;
14 
15 template <typename>
16 struct s {
17   int x;
18 };
19 
20 template <typename T>
21 struct ts {
22   T x;
23 };
24 
25 template <>
26 struct ts<void> {
27   float f;
28 };
29 
f()30 void f() {
31   ts<int> a;
32   ts<double> b;
33   ts<void> c;
34 }
35 
36 namespace gh83671 {
37 template <class _Tp, _Tp __v>
38 struct integral_constant {
39   static constexpr const _Tp value = __v;
40   typedef integral_constant type;
41 };
42 
43 template <bool _Val>
44 using _BoolConstant = integral_constant<bool, _Val>;
45 
46 template <class _Tp, class _Up>
47 struct is_same : _BoolConstant<__is_same(_Tp, _Up)> {};
48 
49 template < class _Tp >
50 class numeric_limits {};
51 
52 template < class _Tp >
53 class numeric_limits< const _Tp > : public numeric_limits< _Tp > {};
54 }
55 
56 namespace gh83684 {
57 template <class Pointer>
58 struct AllocationResult {
59   Pointer ptr = nullptr;
60   int count = 0;
61 };
62 }
63 
64 // CHECK:          0 | struct a
65 // CHECK:          0 | struct b
66 // CHECK:          0 | class c
67 // CHECK:          0 | struct ts<void>
68 // CHECK-NEXT:     0 |   float
69 // CHECK:          0 | struct ts<int>
70 // CHECK:          0 | struct ts<double>
71 // CHECK-NOT:      0 | class d
72 // CHECK-NOT:      0 | struct s
73 // CHECK-NOT:      0 | struct AllocationResult
74