|
| 1 | +// RUN: rm -rf %t |
| 2 | +// RUN: split-file %s %t |
| 3 | +// RUN: cd %t |
| 4 | +// |
| 5 | +// RUN: %clang_cc1 -std=c++20 -I %t %t/A.cppm -emit-module-interface -o %t/A.pcm -verify |
| 6 | +// RUN: %clang_cc1 -std=c++20 -I %t %t/B.cpp -fmodule-file=A=%t/A.pcm -fsyntax-only -verify -ast-dump-all -ast-dump-filter baz | FileCheck %s |
| 7 | + |
| 8 | +//--- foo.h |
| 9 | +namespace baz { |
| 10 | + using foo = char; |
| 11 | + using baz::foo; |
| 12 | +} |
| 13 | + |
| 14 | +//--- A.cppm |
| 15 | +// expected-no-diagnostics |
| 16 | +module; |
| 17 | +#include "foo.h" |
| 18 | +export module A; |
| 19 | + |
| 20 | +//--- B.cpp |
| 21 | +// expected-no-diagnostics |
| 22 | +#include "foo.h" |
| 23 | +import A; |
| 24 | +// Since modules are loaded lazily, force loading by performing a lookup. |
| 25 | +using xxx = baz::foo; |
| 26 | + |
| 27 | +// CHECK-LABEL: Dumping baz: |
| 28 | +// CHECK-NEXT: NamespaceDecl 0x[[BAZ_REDECL_ADDR:[^ ]*]] prev 0x[[BAZ_ADDR:[^ ]*]] <{{.*}}> line:{{.*}} imported in A.<global> hidden <undeserialized declarations> baz |
| 29 | +// CHECK-NEXT: |-original Namespace 0x[[BAZ_ADDR]] 'baz' |
| 30 | +// CHECK-NEXT: |-TypeAliasDecl 0x[[ALIAS_REDECL_ADDR:[^ ]*]] prev 0x[[ALIAS_ADDR:[^ ]*]] <{{.*}}> col:{{.*}} imported in A.<global> hidden foo 'char' |
| 31 | +// CHECK-NEXT: | `-BuiltinType 0x{{[^ ]*}} 'char' |
| 32 | +// CHECK-NEXT: |-UsingDecl 0x{{[^ ]*}} first 0x[[USING_ADDR:[^ ]*]] <{{.*}}> col:{{.*}} imported in A.<global> hidden baz::foo |
| 33 | +// CHECK-NEXT: | `-NestedNameSpecifier Namespace 0x[[BAZ_REDECL_ADDR]] 'baz' |
| 34 | +// FIXME: UsingShadowDecl should have been merged |
| 35 | +// CHECK-NOT: `-UsingShadowDecl 0x{{[^ ]*}} prev 0x{{[^ ]*}} <{{.*}}> col:{{.*}} imported in A.<global> hidden implicit TypeAlias 0x[[ALIAS_REDECL_ADDR]] 'foo' |
| 36 | +// CHECK-NEXT: `-UsingShadowDecl 0x{{[^ ]*}} <{{.*}}> col:{{.*}} imported in A.<global> hidden implicit TypeAlias 0x[[ALIAS_REDECL_ADDR]] 'foo' |
| 37 | + |
| 38 | +// CHECK-LABEL: Dumping baz: |
| 39 | +// CHECK-NEXT: NamespaceDecl 0x[[BAZ_ADDR]] <{{.*}}> line:{{.*}} baz |
| 40 | +// CHECK-NEXT: |-TypeAliasDecl 0x[[ALIAS_ADDR]] <{{.*}}> col:{{.*}} referenced foo 'char' |
| 41 | +// CHECK-NEXT: | `-BuiltinType 0x{{[^ ]*}} 'char' |
| 42 | +// CHECK-NEXT: |-UsingDecl 0x[[USING_ADDR]] <{{.*}}> col:{{.*}} baz::foo |
| 43 | +// CHECK-NEXT: | `-NestedNameSpecifier Namespace 0x[[BAZ_ADDR]] 'baz' |
| 44 | +// CHECK-NEXT: `-UsingShadowDecl 0x[[SHADOW_ADDR:[^ ]*]] <{{.*}}> col:{{.*}} implicit TypeAlias 0x[[ALIAS_ADDR]] 'foo' |
0 commit comments