CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
486 lines
22 KiB
C++
486 lines
22 KiB
C++
// RUN: %clang_cc1 -ast-dump -std=c++2c %s | FileCheck --match-full-lines %s
|
|
|
|
namespace std {
|
|
template <typename T>
|
|
struct initializer_list {
|
|
const T* begin;
|
|
const T* end;
|
|
};
|
|
} // namespace std
|
|
|
|
typedef int TypedefInt;
|
|
// CHECK: |-TypedefDecl {{.*}} TypedefInt 'int'
|
|
|
|
using UsingInt = int;
|
|
// CHECK: |-TypeAliasDecl {{.*}} UsingInt 'int'
|
|
|
|
template <typename T>
|
|
using TemplateUsingInt = T;
|
|
// CHECK: |-TypeAliasTemplateDecl {{.*}} TemplateUsingInt external-linkage
|
|
// CHECK: | `-TypeAliasDecl {{.*}} TemplateUsingInt 'T'
|
|
|
|
typedef struct {} TypedefUnnamedStruct;
|
|
// CHECK: |-TypedefDecl {{.*}} TypedefUnnamedStruct 'struct TypedefUnnamedStruct' external-linkage
|
|
// CHECK: | `-RecordType {{.*}} 'struct TypedefUnnamedStruct' owns_tag struct
|
|
|
|
using UsingUnnamedStruct = struct {};
|
|
// CHECK: |-TypeAliasDecl {{.*}} UsingUnnamedStruct 'struct UsingUnnamedStruct' external-linkage
|
|
// CHECK: | `-RecordType {{.*}} 'struct UsingUnnamedStruct' owns_tag struct
|
|
|
|
typedef struct TypedefNamedStruct {} TypedefNameForNamedStruct;
|
|
// CHECK: |-CXXRecordDecl {{.*}} struct TypedefNamedStruct definition external-linkage
|
|
// CHECK: | `-CXXRecordDecl {{.*}} implicit struct TypedefNamedStruct
|
|
// CHECK: |-TypedefDecl {{.*}} TypedefNameForNamedStruct 'struct TypedefNamedStruct'
|
|
// CHECK: | `-RecordType {{.*}} 'struct TypedefNamedStruct' owns_tag struct
|
|
// CHECK: | `-CXXRecord {{.*}} 'TypedefNamedStruct'
|
|
|
|
using AliasForNamedStruct = struct UsingNamedStruct {};
|
|
// CHECK: |-CXXRecordDecl {{.*}} struct UsingNamedStruct definition external-linkage
|
|
// CHECK: | `-CXXRecordDecl {{.*}} implicit struct UsingNamedStruct
|
|
// CHECK: |-TypeAliasDecl {{.*}} AliasForNamedStruct 'struct UsingNamedStruct'
|
|
// CHECK: | `-RecordType {{.*}} 'struct UsingNamedStruct' owns_tag struct
|
|
// CHECK: | `-CXXRecord {{.*}} 'UsingNamedStruct'
|
|
|
|
typedef enum {} TypedefUnnamedEnum;
|
|
// CHECK: |-TypedefDecl {{.*}} TypedefUnnamedEnum 'enum TypedefUnnamedEnum' external-linkage
|
|
// CHECK: | `-EnumType {{.*}} 'enum TypedefUnnamedEnum' owns_tag enum
|
|
|
|
using UsingUnnamedEnum = enum {};
|
|
// CHECK: |-TypeAliasDecl {{.*}} UsingUnnamedEnum 'enum UsingUnnamedEnum' external-linkage
|
|
// CHECK: | `-EnumType {{.*}} 'enum UsingUnnamedEnum' owns_tag enum
|
|
|
|
enum Enum {};
|
|
// CHECK: |-EnumDecl {{.*}} Enum external-linkage
|
|
|
|
enum { Enumerator };
|
|
// CHECK: |-EnumDecl {{.*}}
|
|
// CHECK: | `-EnumConstantDecl {{.*}} referenced Enumerator '(unnamed enum at {{.*}})'
|
|
// FIXME: This enum has enumerator as its name for linkage purposes, and has external linkage.
|
|
|
|
decltype(Enumerator) f();
|
|
// CHECK: |-FunctionDecl {{.*}} f 'decltype(Enumerator) ()' external-linkage
|
|
|
|
auto [Binding1, Binding2] = {3, 4};
|
|
// CHECK: |-BindingDecl {{.*}} Binding1 'const int *'
|
|
// CHECK: |-BindingDecl {{.*}} Binding2 'const int *'
|
|
// CHECK: |-DecompositionDecl {{.*}} used 'std::initializer_list<int>' cinit external-linkage
|
|
// CHECK: | |-BindingDecl {{.*}} Binding1 'const int *'
|
|
// CHECK: | `-BindingDecl {{.*}} Binding2 'const int *'
|
|
// FIXME: Why BindingDecls are duplicated?
|
|
|
|
int Int = 0;
|
|
// CHECK: |-VarDecl {{.*}} Int 'int' cinit external-linkage
|
|
|
|
const int ConstInt = 0;
|
|
// CHECK: |-VarDecl {{.*}} ConstInt 'const int' cinit internal-linkage
|
|
|
|
template <typename T>
|
|
T TemplatedVar = T{};
|
|
// CHECK: |-VarTemplateDecl {{.*}} TemplatedVar external-linkage
|
|
// CHECK: | |-VarDecl {{.*}} TemplatedVar 'T' cinit
|
|
// CHECK: | `-VarTemplateSpecializationDecl {{.*}} used TemplatedVar 'int' implicit_instantiation cinit instantiated_from 0x{{[0-9a-f]*}} external-linkage
|
|
|
|
// FIXME: VarTemplateSpecializationDecl node is printed twice.
|
|
|
|
int TemplatedVarSpec = TemplatedVar<int>;
|
|
// CHECK: |-VarDecl {{.*}} TemplatedVarSpec 'int' cinit external-linkage
|
|
// CHECK: |-VarTemplateSpecializationDecl {{.*}} used TemplatedVar 'int' implicit_instantiation cinit instantiated_from 0x{{[0-9a-f]*}} external-linkage
|
|
|
|
void FuncDef() {
|
|
// CHECK: |-FunctionDecl {{.*}} FuncDef 'void ()' external-linkage
|
|
|
|
extern int Int;
|
|
// CHECK: | | `-VarDecl {{.*}} Int 'int' extern external-linkage
|
|
extern const int ConstInt;
|
|
// CHECK: | | `-VarDecl {{.*}} ConstInt 'const int' extern internal-linkage
|
|
void FuncDecl();
|
|
// CHECK: | | `-FunctionDecl {{.*}} FuncDecl 'void ()' external-linkage
|
|
extern void FuncDecl();
|
|
// CHECK: | | `-FunctionDecl {{.*}} FuncDecl 'void ()' extern external-linkage
|
|
{
|
|
int Int;
|
|
// CHECK: | | `-VarDecl {{.*}} Int 'int'
|
|
{
|
|
extern int Int;
|
|
// CHECK: | | `-VarDecl {{.*}} Int 'int' extern external-linkage
|
|
extern const int ConstInt;
|
|
// CHECK: | `-VarDecl {{.*}} ConstInt 'const int' extern internal-linkage
|
|
}
|
|
}
|
|
}
|
|
|
|
template <typename>
|
|
void TemplatedFuncDef() {}
|
|
// CHECK: |-FunctionTemplateDecl {{.*}} TemplatedFuncDef external-linkage
|
|
// CHECK: | `-FunctionDecl {{.*}} TemplatedFuncDef 'void ()'
|
|
|
|
namespace Known {
|
|
|
|
void FuncDecl();
|
|
// CHECK: | |-FunctionDecl {{.*}} FuncDecl 'void ()' external-linkage
|
|
|
|
constexpr void ConstexprFuncDecl();
|
|
// CHECK: | |-FunctionDecl{{.*}} constexpr ConstexprFuncDecl 'void ()' implicit-inline external-linkage
|
|
|
|
consteval void ConstevalFuncDecl();
|
|
// CHECK: | |-FunctionDecl{{.*}} consteval ConstevalFuncDecl 'void ()' implicit-inline external-linkage
|
|
// FIXME: Why consteval functions have linkage?
|
|
|
|
template <typename>
|
|
void TemplatedFuncDecl();
|
|
// CHECK: | |-FunctionTemplateDecl {{.*}} TemplatedFuncDecl external-linkage
|
|
// CHECK: | | `-FunctionDecl {{.*}} TemplatedFuncDecl 'void ()'
|
|
|
|
template <typename>
|
|
constexpr void TemplatedConstexprFuncDecl();
|
|
// CHECK: | |-FunctionTemplateDecl {{.*}} TemplatedConstexprFuncDecl external-linkage
|
|
// CHECK: | | `-FunctionDecl {{.*}} constexpr TemplatedConstexprFuncDecl 'void ()' implicit-inline
|
|
|
|
template <typename>
|
|
consteval void TemplatedConstevalFuncDecl();
|
|
// CHECK: | |-FunctionTemplateDecl {{.*}} TemplatedConstevalFuncDecl external-linkage
|
|
// CHECK: | | `-FunctionDecl {{.*}} consteval TemplatedConstevalFuncDecl 'void ()' implicit-inline
|
|
// FIXME: Should consteval function templates have linkage?
|
|
|
|
struct FriendStruct;
|
|
// CHECK: | |-CXXRecordDecl {{.*}} struct FriendStruct external-linkage
|
|
|
|
template <typename>
|
|
struct FriendStructTemplate;
|
|
// CHECK: | `-ClassTemplateDecl {{.*}} FriendStructTemplate external-linkage
|
|
// CHECK: | `-CXXRecordDecl {{.*}} struct FriendStructTemplate
|
|
|
|
} // namespace Known
|
|
|
|
namespace N {
|
|
// CHECK-LABEL: |-NamespaceDecl {{.*}} N external-linkage
|
|
|
|
struct Struct {
|
|
// CHECK: | `-CXXRecordDecl {{.*}} struct Struct definition external-linkage
|
|
// CHECK: | |-CXXRecordDecl {{.*}} implicit struct Struct
|
|
|
|
friend struct UnknownFriendStruct;
|
|
// CHECK: | |-FriendDecl {{.*}} 'struct UnknownFriendStruct'
|
|
// CHECK: | | `-CXXRecordDecl {{.*}} friend_undeclared struct UnknownFriendStruct external-linkage
|
|
// FIXME: Friend declarations do not bind names, so they cannot have linkage.
|
|
|
|
template <typename>
|
|
friend struct UnknownFriendStructTemplate;
|
|
// CHECK: | |-FriendDecl {{.*}} col:{{[0-9]*$}}
|
|
// CHECK: | | `-ClassTemplateDecl {{.*}} friend_undeclared UnknownFriendStructTemplate external-linkage
|
|
// CHECK: | | `-CXXRecordDecl {{.*}} struct UnknownFriendStructTemplate
|
|
// FIXME: Friend declarations do not bind names, so they cannot have linkage.
|
|
|
|
friend struct Known::FriendStruct;
|
|
// CHECK: | |-FriendDecl {{.*}} 'struct Known::FriendStruct'
|
|
// FIXME: Where is CXXRecordDecl?
|
|
|
|
template <typename>
|
|
friend struct Known::FriendStructTemplate;
|
|
// CHECK: | |-FriendDecl {{.*}} col:{{[0-9]*$}}
|
|
// CHECK: | | `-ClassTemplateDecl {{.*}} friend FriendStructTemplate external-linkage
|
|
// CHECK: | | `-CXXRecordDecl {{.*}} struct FriendStructTemplate
|
|
|
|
friend void UnknownFuncDecl();
|
|
// CHECK: | |-FriendDecl {{.*}} col:{{[0-9]*$}}
|
|
// CHECK: | | `-FunctionDecl {{.*}} friend_undeclared UnknownFuncDecl 'void ()' external-linkage
|
|
// FIXME: Friend declarations do not bind names, so they cannot have linkage.
|
|
|
|
friend constexpr void UnknownConstexprFuncDecl();
|
|
// CHECK: | |-FriendDecl {{.*}} col:{{[0-9]*$}}
|
|
// CHECK: | | `-FunctionDecl {{.*}} constexpr friend_undeclared UnknownConstexprFuncDecl 'void ()' implicit-inline external-linkage
|
|
|
|
friend consteval void UnknownConstevalFuncDecl();
|
|
// CHECK: | |-FriendDecl {{.*}} col:{{[0-9]*$}}
|
|
// CHECK: | | `-FunctionDecl {{.*}} consteval friend_undeclared UnknownConstevalFuncDecl 'void ()' implicit-inline external-linkage
|
|
|
|
template <typename>
|
|
friend void UnknownFuncDecl();
|
|
// CHECK: | |-FriendDecl {{.*}} col:{{[0-9]*$}}
|
|
// CHECK: | | `-FunctionTemplateDecl {{.*}} friend_undeclared UnknownFuncDecl external-linkage
|
|
// FIXME: Friend declarations do not bind names, so they cannot have linkage.
|
|
|
|
template <typename>
|
|
friend constexpr void UnknownConstexprFuncDecl();
|
|
// CHECK: | |-FriendDecl {{.*}} col:{{[0-9]*$}}
|
|
// CHECK: | | `-FunctionTemplateDecl {{.*}} friend_undeclared UnknownConstexprFuncDecl external-linkage
|
|
|
|
template <typename>
|
|
friend consteval void UnknownConstevalFuncDecl();
|
|
// CHECK: | |-FriendDecl {{.*}} col:{{[0-9]*$}}
|
|
// CHECK: | | `-FunctionTemplateDecl {{.*}} friend_undeclared UnknownConstevalFuncDecl external-linkage
|
|
|
|
friend void Known::FuncDecl();
|
|
// CHECK: | |-FriendDecl {{.*}} col:{{[0-9]*$}}
|
|
// CHECK: | | `-FunctionDecl {{.*}} friend FuncDecl 'void ()' external-linkage
|
|
|
|
friend constexpr void Known::ConstexprFuncDecl();
|
|
// CHECK: | |-FriendDecl {{.*}} col:{{[0-9]*$}}
|
|
// CHECK: | | `-FunctionDecl {{.*}} constexpr friend ConstexprFuncDecl 'void ()' implicit-inline external-linkage
|
|
|
|
friend consteval void Known::ConstevalFuncDecl();
|
|
// CHECK: | |-FriendDecl {{.*}} col:{{[0-9]*$}}
|
|
// CHECK: | | `-FunctionDecl {{.*}} consteval friend ConstevalFuncDecl 'void ()' implicit-inline external-linkage
|
|
|
|
template <typename>
|
|
friend void Known::TemplatedFuncDecl();
|
|
// CHECK: | |-FriendDecl {{.*}} col:{{[0-9]*$}}
|
|
// CHECK: | | `-FunctionTemplateDecl {{.*}} friend TemplatedFuncDecl external-linkage
|
|
// CHECK: | | `-FunctionDecl {{.*}} friend TemplatedFuncDecl 'void ()'
|
|
|
|
template <typename>
|
|
friend constexpr void Known::TemplatedConstexprFuncDecl();
|
|
// CHECK: | |-FriendDecl {{.*}} col:{{[0-9]*$}}
|
|
// CHECK: | | `-FunctionTemplateDecl {{.*}} friend TemplatedConstexprFuncDecl external-linkage
|
|
// CHECK: | | `-FunctionDecl {{.*}} constexpr friend TemplatedConstexprFuncDecl 'void ()' implicit-inline
|
|
|
|
template <typename>
|
|
friend consteval void Known::TemplatedConstevalFuncDecl();
|
|
// CHECK: | |-FriendDecl {{.*}} col:{{[0-9]*$}}
|
|
// CHECK: | | `-FunctionTemplateDecl {{.*}} friend TemplatedConstevalFuncDecl external-linkage
|
|
// CHECK: | | `-FunctionDecl {{.*}} consteval friend TemplatedConstevalFuncDecl 'void ()' implicit-inline
|
|
|
|
friend void HiddenFriend() {}
|
|
// CHECK: | |-FriendDecl {{.*}} col:{{[0-9]*$}}
|
|
// CHECK: | | `-FunctionDecl {{.*}} friend_undeclared HiddenFriend 'void ()' implicit-inline external-linkage
|
|
|
|
template <typename>
|
|
friend void HiddenFriendTemplate() {}
|
|
// CHECK: | |-FriendDecl {{.*}} col:{{[0-9]*$}}
|
|
// CHECK: | | `-FunctionTemplateDecl {{.*}} friend_undeclared HiddenFriendTemplate external-linkage
|
|
// CHECK: | | `-FunctionDecl {{.*}} friend_undeclared HiddenFriendTemplate 'void ()' implicit-inline
|
|
|
|
int NonStaticDataMember;
|
|
// CHECK: | |-FieldDecl {{.*}} NonStaticDataMember 'int'
|
|
|
|
static int StaticDataMember;
|
|
// CHECK: | |-VarDecl {{.*}} StaticDataMember 'int' static external-linkage
|
|
|
|
void NonStaticMemberFunction();
|
|
// CHECK: | |-CXXMethodDecl {{.*}} NonStaticMemberFunction 'void ()' external-linkage
|
|
|
|
constexpr void ConstexprNonStaticMemberFunction();
|
|
// CHECK: | |-CXXMethodDecl {{.*}} constexpr ConstexprNonStaticMemberFunction 'void ()' implicit-inline external-linkage
|
|
|
|
consteval void ConstevalNonStaticMemberFunction();
|
|
// CHECK: | |-CXXMethodDecl {{.*}} consteval ConstevalNonStaticMemberFunction 'void ()' implicit-inline external-linkage
|
|
|
|
template <typename>
|
|
void NonStaticMemberFunctionTemplate();
|
|
// CHECK: | |-FunctionTemplateDecl {{.*}} NonStaticMemberFunctionTemplate external-linkage
|
|
// CHECK: | | `-CXXMethodDecl {{.*}} NonStaticMemberFunctionTemplate 'void ()'
|
|
|
|
template <typename>
|
|
constexpr void ConstexprNonStaticMemberFunction();
|
|
// CHECK: | |-FunctionTemplateDecl {{.*}} ConstexprNonStaticMemberFunction external-linkage
|
|
// CHECK: | | `-CXXMethodDecl {{.*}} constexpr ConstexprNonStaticMemberFunction 'void ()' implicit-inline
|
|
|
|
template <typename>
|
|
consteval void ConstevalNonStaticMemberFunction();
|
|
// CHECK: | |-FunctionTemplateDecl {{.*}} ConstevalNonStaticMemberFunction external-linkage
|
|
// CHECK: | | `-CXXMethodDecl {{.*}} consteval ConstevalNonStaticMemberFunction 'void ()' implicit-inline
|
|
|
|
static void StaticMemberFunction();
|
|
// CHECK: | |-CXXMethodDecl {{.*}} StaticMemberFunction 'void ()' static external-linkage
|
|
|
|
constexpr static void ConstexprStaticMemberFunction();
|
|
// CHECK: | |-CXXMethodDecl {{.*}} constexpr ConstexprStaticMemberFunction 'void ()' static implicit-inline external-linkage
|
|
|
|
consteval static void ConstevalStaticMemberFunction();
|
|
// CHECK: | |-CXXMethodDecl {{.*}} consteval ConstevalStaticMemberFunction 'void ()' static implicit-inline external-linkage
|
|
|
|
template <typename>
|
|
static void StaticMemberFunctionTemplate();
|
|
// CHECK: | |-FunctionTemplateDecl {{.*}} StaticMemberFunctionTemplate external-linkage
|
|
// CHECK: | | `-CXXMethodDecl {{.*}} StaticMemberFunctionTemplate 'void ()' static
|
|
|
|
template <typename>
|
|
constexpr static void ConstexprStaticMemberFunctionTemplate();
|
|
// CHECK: | |-FunctionTemplateDecl {{.*}} ConstexprStaticMemberFunctionTemplate external-linkage
|
|
// CHECK: | | `-CXXMethodDecl {{.*}} ConstexprStaticMemberFunctionTemplate 'void ()' static implicit-inline
|
|
|
|
template <typename>
|
|
consteval static void ConstevalStaticMemberFunctionTemplate();
|
|
// CHECK: | |-FunctionTemplateDecl {{.*}} ConstevalStaticMemberFunctionTemplate external-linkage
|
|
// CHECK: | | `-CXXMethodDecl {{.*}} ConstevalStaticMemberFunctionTemplate 'void ()' static implicit-inline
|
|
|
|
struct NestedStruct {};
|
|
// CHECK: | |-CXXRecordDecl {{.*}} struct NestedStruct definition external-linkage
|
|
// CHECK: | | `-CXXRecordDecl {{.*}} implicit struct NestedStruct
|
|
|
|
template <typename>
|
|
struct NestedStructTemplate {};
|
|
// CHECK: | `-ClassTemplateDecl {{.*}} NestedStructTemplate external-linkage
|
|
// CHECK: | `-CXXRecordDecl {{.*}} struct NestedStructTemplate definition
|
|
// CHECK: | `-CXXRecordDecl {{.*}} implicit struct NestedStructTemplate
|
|
};
|
|
} // namespace N
|
|
|
|
namespace M {
|
|
// CHECK-LABEL: |-NamespaceDecl {{.*}} M external-linkage
|
|
|
|
template <typename>
|
|
struct StructTemplate {
|
|
// CHECK: | `-ClassTemplateDecl {{.*}} StructTemplate external-linkage
|
|
// CHECK: | `-CXXRecordDecl {{.*}} struct StructTemplate definition
|
|
// CHECK: | |-CXXRecordDecl {{.*}} implicit struct StructTemplate
|
|
|
|
friend struct UnknownFriendStruct;
|
|
// CHECK: | |-FriendDecl {{.*}} 'struct UnknownFriendStruct'
|
|
// CHECK: | | `-CXXRecordDecl {{.*}} friend_undeclared struct UnknownFriendStruct external-linkage
|
|
// FIXME: Friend declarations do not bind names, so they cannot have linkage.
|
|
|
|
template <typename>
|
|
friend struct UnknownFriendStructTemplate;
|
|
// CHECK: | |-FriendDecl {{.*}} col:{{[0-9]*$}}
|
|
// CHECK: | | `-ClassTemplateDecl {{.*}} friend_undeclared UnknownFriendStructTemplate external-linkage
|
|
// CHECK: | | `-CXXRecordDecl {{.*}} struct UnknownFriendStructTemplate
|
|
// FIXME: Friend declarations do not bind names, so they cannot have linkage.
|
|
|
|
friend struct Known::FriendStruct;
|
|
// CHECK: | |-FriendDecl {{.*}} 'struct Known::FriendStruct'
|
|
|
|
template <typename>
|
|
friend struct Known::FriendStructTemplate;
|
|
// CHECK: | |-FriendDecl {{.*}} col:{{[0-9]*$}}
|
|
// CHECK: | | `-ClassTemplateDecl {{.*}} friend_undeclared FriendStructTemplate external-linkage
|
|
// CHECK: | | `-CXXRecordDecl {{.*}} struct FriendStructTemplate
|
|
|
|
friend void UnknownFuncDecl();
|
|
// CHECK: | |-FriendDecl {{.*}} col:{{[0-9]*$}}
|
|
// CHECK: | | `-FunctionDecl {{.*}} friend_undeclared UnknownFuncDecl 'void ()' external-linkage
|
|
// FIXME: Friend declarations do not bind names, so they cannot have linkage.
|
|
|
|
friend constexpr void UnknownConstexprFuncDecl();
|
|
// CHECK: | |-FriendDecl {{.*}} col:{{[0-9]*$}}
|
|
// CHECK: | | `-FunctionDecl {{.*}} constexpr friend_undeclared UnknownConstexprFuncDecl 'void ()' implicit-inline external-linkage
|
|
|
|
friend consteval void UnknownConstevalFuncDecl();
|
|
// CHECK: | |-FriendDecl {{.*}} col:{{[0-9]*$}}
|
|
// CHECK: | | `-FunctionDecl {{.*}} consteval friend_undeclared UnknownConstevalFuncDecl 'void ()' implicit-inline external-linkage
|
|
|
|
template <typename>
|
|
friend void UnknownFuncDecl();
|
|
// CHECK: | |-FriendDecl {{.*}} col:{{[0-9]*$}}
|
|
// CHECK: | | `-FunctionTemplateDecl {{.*}} friend_undeclared UnknownFuncDecl external-linkage
|
|
// FIXME: Friend declarations do not bind names, so they cannot have linkage.
|
|
|
|
template <typename>
|
|
friend constexpr void UnknownConstexprFuncDecl();
|
|
// CHECK: | |-FriendDecl {{.*}} col:{{[0-9]*$}}
|
|
// CHECK: | | `-FunctionTemplateDecl {{.*}} friend_undeclared UnknownConstexprFuncDecl external-linkage
|
|
|
|
template <typename>
|
|
friend consteval void UnknownConstevalFuncDecl();
|
|
// CHECK: | |-FriendDecl {{.*}} col:{{[0-9]*$}}
|
|
// CHECK: | | `-FunctionTemplateDecl {{.*}} friend_undeclared UnknownConstevalFuncDecl external-linkage
|
|
|
|
friend void Known::FuncDecl();
|
|
// CHECK: | |-FriendDecl {{.*}} col:{{[0-9]*$}}
|
|
// CHECK: | | `-FunctionDecl {{.*}} friend_undeclared FuncDecl 'void ()' external-linkage
|
|
|
|
friend constexpr void Known::ConstexprFuncDecl();
|
|
// CHECK: | |-FriendDecl {{.*}} col:{{[0-9]*$}}
|
|
// CHECK: | | `-FunctionDecl {{.*}} constexpr friend_undeclared ConstexprFuncDecl 'void ()' implicit-inline external-linkage
|
|
|
|
friend consteval void Known::ConstevalFuncDecl();
|
|
// CHECK: | |-FriendDecl {{.*}} col:{{[0-9]*$}}
|
|
// CHECK: | | `-FunctionDecl {{.*}} consteval friend_undeclared ConstevalFuncDecl 'void ()' implicit-inline external-linkage
|
|
|
|
template <typename>
|
|
friend void Known::TemplatedFuncDecl();
|
|
// CHECK: | |-FriendDecl {{.*}} col:{{[0-9]*$}}
|
|
// CHECK: | | `-FunctionTemplateDecl {{.*}} friend TemplatedFuncDecl external-linkage
|
|
// CHECK: | | `-FunctionDecl {{.*}} friend TemplatedFuncDecl 'void ()'
|
|
|
|
template <typename>
|
|
friend constexpr void Known::TemplatedConstexprFuncDecl();
|
|
// CHECK: | |-FriendDecl {{.*}} col:{{[0-9]*$}}
|
|
// CHECK: | | `-FunctionTemplateDecl {{.*}} friend TemplatedConstexprFuncDecl external-linkage
|
|
// CHECK: | | `-FunctionDecl {{.*}} constexpr friend TemplatedConstexprFuncDecl 'void ()' implicit-inline
|
|
|
|
template <typename>
|
|
friend consteval void Known::TemplatedConstevalFuncDecl();
|
|
// CHECK: | |-FriendDecl {{.*}} col:{{[0-9]*$}}
|
|
// CHECK: | | `-FunctionTemplateDecl {{.*}} friend TemplatedConstevalFuncDecl external-linkage
|
|
// CHECK: | | `-FunctionDecl {{.*}} consteval friend TemplatedConstevalFuncDecl 'void ()' implicit-inline
|
|
|
|
friend void HiddenFriend() {}
|
|
// CHECK: | |-FriendDecl {{.*}} col:{{[0-9]*$}}
|
|
// CHECK: | | `-FunctionDecl {{.*}} friend_undeclared HiddenFriend 'void ()' implicit-inline external-linkage
|
|
|
|
template <typename>
|
|
friend void HiddenFriendTemplate() {}
|
|
// CHECK: | |-FriendDecl {{.*}} col:{{[0-9]*$}}
|
|
// CHECK: | | `-FunctionTemplateDecl {{.*}} friend_undeclared HiddenFriendTemplate external-linkage
|
|
// CHECK: | | `-FunctionDecl {{.*}} friend_undeclared HiddenFriendTemplate 'void ()' implicit-inline
|
|
|
|
int NonStaticDataMember;
|
|
// CHECK: | |-FieldDecl {{.*}} NonStaticDataMember 'int'
|
|
|
|
static int StaticDataMember;
|
|
// CHECK: | |-VarDecl {{.*}} StaticDataMember 'int' static external-linkage
|
|
|
|
void NonStaticMemberFunction();
|
|
// CHECK: | |-CXXMethodDecl {{.*}} NonStaticMemberFunction 'void ()' external-linkage
|
|
|
|
constexpr void ConstexprNonStaticMemberFunction();
|
|
// CHECK: | |-CXXMethodDecl {{.*}} constexpr ConstexprNonStaticMemberFunction 'void ()' implicit-inline external-linkage
|
|
|
|
consteval void ConstevalNonStaticMemberFunction();
|
|
// CHECK: | |-CXXMethodDecl {{.*}} consteval ConstevalNonStaticMemberFunction 'void ()' implicit-inline external-linkage
|
|
|
|
template <typename>
|
|
void NonStaticMemberFunctionTemplate();
|
|
// CHECK: | |-FunctionTemplateDecl {{.*}} NonStaticMemberFunctionTemplate external-linkage
|
|
// CHECK: | | `-CXXMethodDecl {{.*}} NonStaticMemberFunctionTemplate 'void ()'
|
|
|
|
template <typename>
|
|
constexpr void ConstexprNonStaticMemberFunction();
|
|
// CHECK: | |-FunctionTemplateDecl {{.*}} ConstexprNonStaticMemberFunction external-linkage
|
|
// CHECK: | | `-CXXMethodDecl {{.*}} constexpr ConstexprNonStaticMemberFunction 'void ()' implicit-inline
|
|
|
|
template <typename>
|
|
consteval void ConstevalNonStaticMemberFunction();
|
|
// CHECK: | |-FunctionTemplateDecl {{.*}} ConstevalNonStaticMemberFunction external-linkage
|
|
// CHECK: | | `-CXXMethodDecl {{.*}} consteval ConstevalNonStaticMemberFunction 'void ()' implicit-inline
|
|
|
|
static void StaticMemberFunction();
|
|
// CHECK: | |-CXXMethodDecl {{.*}} StaticMemberFunction 'void ()' static external-linkage
|
|
|
|
constexpr static void ConstexprStaticMemberFunction();
|
|
// CHECK: | |-CXXMethodDecl {{.*}} constexpr ConstexprStaticMemberFunction 'void ()' static implicit-inline external-linkage
|
|
|
|
consteval static void ConstevalStaticMemberFunction();
|
|
// CHECK: | |-CXXMethodDecl {{.*}} consteval ConstevalStaticMemberFunction 'void ()' static implicit-inline external-linkage
|
|
|
|
template <typename>
|
|
static void StaticMemberFunctionTemplate();
|
|
// CHECK: | |-FunctionTemplateDecl {{.*}} StaticMemberFunctionTemplate external-linkage
|
|
// CHECK: | | `-CXXMethodDecl {{.*}} StaticMemberFunctionTemplate 'void ()' static
|
|
|
|
template <typename>
|
|
constexpr static void ConstexprStaticMemberFunctionTemplate();
|
|
// CHECK: | |-FunctionTemplateDecl {{.*}} ConstexprStaticMemberFunctionTemplate external-linkage
|
|
// CHECK: | | `-CXXMethodDecl {{.*}} ConstexprStaticMemberFunctionTemplate 'void ()' static implicit-inline
|
|
|
|
template <typename>
|
|
consteval static void ConstevalStaticMemberFunctionTemplate();
|
|
// CHECK: | |-FunctionTemplateDecl {{.*}} ConstevalStaticMemberFunctionTemplate external-linkage
|
|
// CHECK: | | `-CXXMethodDecl {{.*}} ConstevalStaticMemberFunctionTemplate 'void ()' static implicit-inline
|
|
|
|
struct NestedStruct {};
|
|
// CHECK: | |-CXXRecordDecl {{.*}} struct NestedStruct definition external-linkage
|
|
// CHECK: | | `-CXXRecordDecl {{.*}} implicit struct NestedStruct
|
|
|
|
template <typename>
|
|
struct NestedStructTemplate {};
|
|
// CHECK: | `-ClassTemplateDecl {{.*}} NestedStructTemplate external-linkage
|
|
// CHECK: | `-CXXRecordDecl {{.*}} struct NestedStructTemplate definition
|
|
// CHECK: | `-CXXRecordDecl {{.*}} implicit struct NestedStructTemplate
|
|
};
|
|
} // namespace M
|
|
|
|
namespace NamespaceAlias = N;
|
|
// CHECK: `-NamespaceAliasDecl {{.*}} NamespaceAlias
|