// RUN: rm -rf %t // RUN: mkdir -p %t // RUN: split-file %s %t // RUN: cd %t // // RUN: %clang_cc1 -std=c++20 no-modules.cpp -fsyntax-only -ast-dump | \ // RUN: FileCheck --match-full-lines --check-prefix=CHECK-NM %s // RUN: %clang_cc1 -std=c++20 -xc++-user-header header-unit.h -ast-dump | \ // RUN: FileCheck --match-full-lines --check-prefix=CHECK-HU %s // RUN: %clang_cc1 -std=c++20 module.cpp -ast-dump | \ // RUN: FileCheck --match-full-lines --check-prefix=CHECK-MOD %s //--- no-modules.cpp class X { friend void x(){}; }; // CHECK-NM: `-CXXRecordDecl {{.*}} line:2:7 class X definition // CHECK-NM: |-CXXRecordDecl {{.*}} col:7 implicit class X // CHECK-NM-NEXT: `-FriendDecl {{.*}} col:15 // CHECK-NM-NEXT: `-FunctionDecl {{.*}} parent {{.*}} col:15 friend_undeclared x 'void ()' implicit-inline //--- header-unit.h class Y { friend void y(){}; }; // CHECK-HU: `-CXXRecordDecl {{.*}} <.{{/|\\\\?}}header-unit.h:2:1, line:4:1> line:2:7 class Y definition // CHECK-HU: |-CXXRecordDecl {{.*}} col:7 implicit class Y // CHECK-HU-NEXT: `-FriendDecl {{.*}} col:15 // CHECK-HU-NEXT: `-FunctionDecl {{.*}} parent {{.*}} col:15 friend_undeclared y 'void ()' implicit-inline // A textually-included header //--- header.h class A { friend void a(){}; }; //--- module.cpp module; #include "header.h" export module M; class Z { friend void z(){}; }; // CHECK-MOD: |-CXXRecordDecl {{.*}} <.{{/|\\\\?}}header.h:2:1, line:4:1> line:2:7 in M. hidden class A definition // CHECK-MOD: | |-CXXRecordDecl {{.*}} col:7 in M. hidden implicit class A // CHECK-MOD-NEXT: | `-FriendDecl {{.*}} col:15 in M. // CHECK-MOD-NEXT: | `-FunctionDecl {{.*}} parent {{.*}} col:15 in M. hidden friend_undeclared a 'void ()' implicit-inline // CHECK-MOD: `-CXXRecordDecl {{.*}} line:6:7 in M hidden class Z{{( ReachableWhenImported)?}} definition // CHECK-MOD: |-CXXRecordDecl {{.*}} col:7 in M hidden implicit class Z{{( ReachableWhenImported)?}} // CHECK-MOD-NEXT: `-FriendDecl {{.*}} col:15 in M{{( ReachableWhenImported)?}} // CHECK-MOD-NEXT: `-FunctionDecl {{.*}} parent {{.*}} col:15 in M hidden friend_undeclared z 'void ()'{{( ReachableWhenImported)?}}