aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--clang/lib/CIR/CodeGen/CIRGenModule.cpp5
-rw-r--r--clang/test/CIR/CodeGen/namespace.cpp43
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()