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()30void 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