This revision was automatically updated to reflect the committed changes. Closed by commit rL329836: [CodeGen] Handle __func__ inside __finally (authored by smeenai, committed by ). Herald added a subscriber: llvm-commits.
Repository: rL LLVM https://reviews.llvm.org/D45523 Files: cfe/trunk/lib/CodeGen/CGExpr.cpp cfe/trunk/test/CodeGen/exceptions-seh-finally.c Index: cfe/trunk/test/CodeGen/exceptions-seh-finally.c =================================================================== --- cfe/trunk/test/CodeGen/exceptions-seh-finally.c +++ cfe/trunk/test/CodeGen/exceptions-seh-finally.c @@ -268,6 +268,18 @@ // CHECK-LABEL: define internal void @"?fin$1@0@finally_within_finally@@"({{[^)]*}}) // CHECK-SAME: [[finally_attrs]] +void cleanup_with_func(const char *); +void finally_with_func() { + __try { + might_crash(); + } __finally { + cleanup_with_func(__func__); + } +} + +// CHECK-LABEL: define internal void @"?fin$0@0@finally_with_func@@"({{[^)]*}}) +// CHECK: call void @cleanup_with_func(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @"??_C@_0BC@COAGBPGM@finally_with_func?$AA@", i32 0, i32 0)) + // Look for the absence of noinline. Enum attributes come first, so check that // a string attribute is the first to verify that no enum attributes are // present. Index: cfe/trunk/lib/CodeGen/CGExpr.cpp =================================================================== --- cfe/trunk/lib/CodeGen/CGExpr.cpp +++ cfe/trunk/lib/CodeGen/CGExpr.cpp @@ -2611,7 +2611,7 @@ StringRef NameItems[] = { PredefinedExpr::getIdentTypeName(E->getIdentType()), FnName}; std::string GVName = llvm::join(NameItems, NameItems + 2, "."); - if (auto *BD = dyn_cast<BlockDecl>(CurCodeDecl)) { + if (auto *BD = dyn_cast_or_null<BlockDecl>(CurCodeDecl)) { std::string Name = SL->getString(); if (!Name.empty()) { unsigned Discriminator =
Index: cfe/trunk/test/CodeGen/exceptions-seh-finally.c =================================================================== --- cfe/trunk/test/CodeGen/exceptions-seh-finally.c +++ cfe/trunk/test/CodeGen/exceptions-seh-finally.c @@ -268,6 +268,18 @@ // CHECK-LABEL: define internal void @"?fin$1@0@finally_within_finally@@"({{[^)]*}}) // CHECK-SAME: [[finally_attrs]] +void cleanup_with_func(const char *); +void finally_with_func() { + __try { + might_crash(); + } __finally { + cleanup_with_func(__func__); + } +} + +// CHECK-LABEL: define internal void @"?fin$0@0@finally_with_func@@"({{[^)]*}}) +// CHECK: call void @cleanup_with_func(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @"??_C@_0BC@COAGBPGM@finally_with_func?$AA@", i32 0, i32 0)) + // Look for the absence of noinline. Enum attributes come first, so check that // a string attribute is the first to verify that no enum attributes are // present. Index: cfe/trunk/lib/CodeGen/CGExpr.cpp =================================================================== --- cfe/trunk/lib/CodeGen/CGExpr.cpp +++ cfe/trunk/lib/CodeGen/CGExpr.cpp @@ -2611,7 +2611,7 @@ StringRef NameItems[] = { PredefinedExpr::getIdentTypeName(E->getIdentType()), FnName}; std::string GVName = llvm::join(NameItems, NameItems + 2, "."); - if (auto *BD = dyn_cast<BlockDecl>(CurCodeDecl)) { + if (auto *BD = dyn_cast_or_null<BlockDecl>(CurCodeDecl)) { std::string Name = SL->getString(); if (!Name.empty()) { unsigned Discriminator =
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits