diff options
-rw-r--r-- | clang/lib/CIR/CodeGen/CIRGenModule.cpp | 5 | ||||
-rw-r--r-- | clang/test/CIR/CodeGen/namespace.cpp | 43 |
2 files changed, 48 insertions, 0 deletions
diff --git a/clang/lib/CIR/CodeGen/CIRGenModule.cpp b/clang/lib/CIR/CodeGen/CIRGenModule.cpp index 87e3641..1c89452 100644 --- a/clang/lib/CIR/CodeGen/CIRGenModule.cpp +++ b/clang/lib/CIR/CodeGen/CIRGenModule.cpp @@ -1135,6 +1135,7 @@ void CIRGenModule::emitTopLevelDecl(Decl *decl) { emitGlobalOpenACCDecl(cast<OpenACCDeclareDecl>(decl)); break; case Decl::Enum: + case Decl::Using: // using X; [C++] case Decl::UsingDirective: // using namespace X; [C++] case Decl::Typedef: case Decl::TypeAlias: // using foo = bar; [C++11] @@ -1143,6 +1144,10 @@ void CIRGenModule::emitTopLevelDecl(Decl *decl) { assert(!cir::MissingFeatures::generateDebugInfo()); break; + // No code generation needed. + case Decl::UsingShadow: + break; + // C++ Decls case Decl::LinkageSpec: case Decl::Namespace: diff --git a/clang/test/CIR/CodeGen/namespace.cpp b/clang/test/CIR/CodeGen/namespace.cpp index caa43f9..14490d505 100644 --- a/clang/test/CIR/CodeGen/namespace.cpp +++ b/clang/test/CIR/CodeGen/namespace.cpp @@ -50,3 +50,46 @@ int f4(void) { // CHECK: %[[G3_ADDR:.*]] = cir.get_global @_ZN4test5test22g3E : !cir.ptr<!s32i> // CHECK: %[[G3_VAL:.*]] = cir.load{{.*}} %[[G3_ADDR]] : !cir.ptr<!s32i>, !s32i // CHECK: %[[SUM2:.*]] = cir.binop(add, %[[SUM]], %[[G3_VAL]]) nsw : !s32i + +using test2::f3; +using test2::g3; + +int f5() { + f3(); + return g3; +} + +// CHECK: cir.func @_Z2f5v() +// CHECK: cir.call @_ZN4test5test22f3Ev() +// CHECK: %[[G3_ADDR:.*]] = cir.get_global @_ZN4test5test22g3E : !cir.ptr<!s32i> +// CHECK: %[[G3_VAL:.*]] = cir.load{{.*}} %[[G3_ADDR]] : !cir.ptr<!s32i>, !s32i + +namespace test3 { + struct S { + int a; + } s; +} + +using test3::s; + +int f6() { + return s.a; +} + +// CHECK: cir.func @_Z2f6v() +// CHECK: cir.get_global @_ZN5test31sE : !cir.ptr<!rec_test33A3AS> +// CHECK: cir.get_member %{{.*}}[0] {name = "a"} + +int shadowedFunc() { + return 3; +} + +namespace shadow { + using ::shadowedFunc; +} + +void f7() { + shadow::shadowedFunc(); +} + +// CHECK: cir.func @_Z2f7v() |