[clang] [llvm] Revert "[Sema] Mark alias/ifunc targets used and consider mangled names" (PR #88919)
MaskRay wrote: Thanks. 1c2afbae9af22b58190c10e3517242d01d89d612 is a codegen test of this involved llvm-libc pattern which would also catch the bug. https://github.com/llvm/llvm-project/pull/88919 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [llvm] Revert "[Sema] Mark alias/ifunc targets used and consider mangled names" (PR #88919)
llvmbot wrote: @llvm/pr-subscribers-clang Author: Mehdi Amini (joker-eph) Changes Reverts llvm/llvm-project#87130 Bot is broken with clang crash: https://lab.llvm.org/buildbot/#/builders/272/builds/14063/steps/6/logs/stdio --- Full diff: https://github.com/llvm/llvm-project/pull/88919.diff 6 Files Affected: - (modified) clang/lib/Sema/CMakeLists.txt (-1) - (modified) clang/lib/Sema/SemaDeclAttr.cpp (+11-33) - (modified) clang/test/AST/ast-dump-attr-json.cpp (-1) - (modified) clang/test/Sema/alias-unused-win.cpp (+1-1) - (modified) clang/test/Sema/alias-unused.cpp (+7-9) - (modified) utils/bazel/llvm-project-overlay/clang/BUILD.bazel (-1) ``diff diff --git a/clang/lib/Sema/CMakeLists.txt b/clang/lib/Sema/CMakeLists.txt index a96439df664228..ab3b813a9ccd97 100644 --- a/clang/lib/Sema/CMakeLists.txt +++ b/clang/lib/Sema/CMakeLists.txt @@ -1,6 +1,5 @@ set(LLVM_LINK_COMPONENTS Core - Demangle FrontendHLSL FrontendOpenMP MC diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp index d26f130b5774ce..b7b1fbc625a150 100644 --- a/clang/lib/Sema/SemaDeclAttr.cpp +++ b/clang/lib/Sema/SemaDeclAttr.cpp @@ -45,7 +45,6 @@ #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/STLForwardCompat.h" #include "llvm/ADT/StringExtras.h" -#include "llvm/Demangle/Demangle.h" #include "llvm/IR/Assumptions.h" #include "llvm/MC/MCSectionMachO.h" #include "llvm/Support/Error.h" @@ -1984,36 +1983,6 @@ static void handleWeakRefAttr(Sema , Decl *D, const ParsedAttr ) { D->addAttr(::new (S.Context) WeakRefAttr(S.Context, AL)); } -// Mark alias/ifunc target as used. Due to name mangling, we look up the -// demangled name ignoring parameters (not supported by microsoftDemangle -// https://github.com/llvm/llvm-project/issues/88825). This should handle the -// majority of use cases while leaving namespace scope names unmarked. -static void markUsedForAliasOrIfunc(Sema , Decl *D, const ParsedAttr , -StringRef Str) { - std::unique_ptr Demangled; - if (S.getASTContext().getCXXABIKind() != TargetCXXABI::Microsoft) -Demangled.reset(llvm::itaniumDemangle(Str, /*ParseParams=*/false)); - std::unique_ptr MC(S.Context.createMangleContext()); - SmallString<256> Name; - - const DeclarationNameInfo Target( - (Demangled ? Demangled.get() : Str), AL.getLoc()); - LookupResult LR(S, Target, Sema::LookupOrdinaryName); - if (S.LookupName(LR, S.TUScope)) { -for (NamedDecl *ND : LR) { - if (MC->shouldMangleDeclName(ND)) { -llvm::raw_svector_ostream Out(Name); -Name.clear(); -MC->mangleName(GlobalDecl(ND), Out); - } else { -Name = ND->getIdentifier()->getName(); - } - if (Name == Str) -ND->markUsed(S.Context); -} - } -} - static void handleIFuncAttr(Sema , Decl *D, const ParsedAttr ) { StringRef Str; if (!S.checkStringLiteralArgumentAttr(AL, 0, Str)) @@ -2026,7 +1995,6 @@ static void handleIFuncAttr(Sema , Decl *D, const ParsedAttr ) { return; } - markUsedForAliasOrIfunc(S, D, AL, Str); D->addAttr(::new (S.Context) IFuncAttr(S.Context, AL, Str)); } @@ -2061,7 +2029,17 @@ static void handleAliasAttr(Sema , Decl *D, const ParsedAttr ) { } } - markUsedForAliasOrIfunc(S, D, AL, Str); + // Mark target used to prevent unneeded-internal-declaration warnings. + if (!S.LangOpts.CPlusPlus) { +// FIXME: demangle Str for C++, as the attribute refers to the mangled +// linkage name, not the pre-mangled identifier. +const DeclarationNameInfo target((Str), AL.getLoc()); +LookupResult LR(S, target, Sema::LookupOrdinaryName); +if (S.LookupQualifiedName(LR, S.getCurLexicalContext())) + for (NamedDecl *ND : LR) +ND->markUsed(S.Context); + } + D->addAttr(::new (S.Context) AliasAttr(S.Context, AL, Str)); } diff --git a/clang/test/AST/ast-dump-attr-json.cpp b/clang/test/AST/ast-dump-attr-json.cpp index 883e584bfedf07..051c2956abfdf7 100644 --- a/clang/test/AST/ast-dump-attr-json.cpp +++ b/clang/test/AST/ast-dump-attr-json.cpp @@ -46,7 +46,6 @@ __thread __attribute__ ((tls_model ("local-exec"))) int tls_model_var; // CHECK-NEXT:"tokLen": 11 // CHECK-NEXT: } // CHECK-NEXT: }, -// CHECK-NEXT: "isUsed": true, // CHECK-NEXT: "name": "global_decl", // CHECK-NEXT: "mangledName": "global_decl", // CHECK-NEXT: "type": { diff --git a/clang/test/Sema/alias-unused-win.cpp b/clang/test/Sema/alias-unused-win.cpp index 97d57a3bbd1e31..47c96d41175179 100644 --- a/clang/test/Sema/alias-unused-win.cpp +++ b/clang/test/Sema/alias-unused-win.cpp @@ -7,7 +7,7 @@ extern "C" { static int f(void) { return 42; } // cxx-warning{{unused function 'f'}} int g(void) __attribute__((alias("f"))); -static int foo [] = { 42, 0xDEAD }; +static int foo [] = { 42, 0xDEAD }; // cxx-warning{{variable 'foo' is not needed and will not be emitted}} extern typeof(foo) bar __attribute__((unused, alias("foo"))); static int
[clang] [llvm] Revert "[Sema] Mark alias/ifunc targets used and consider mangled names" (PR #88919)
https://github.com/joker-eph closed https://github.com/llvm/llvm-project/pull/88919 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [llvm] Revert "[Sema] Mark alias/ifunc targets used and consider mangled names" (PR #88919)
https://github.com/joker-eph created https://github.com/llvm/llvm-project/pull/88919 Reverts llvm/llvm-project#87130 Bot is broken with clang crash: https://lab.llvm.org/buildbot/#/builders/272/builds/14063/steps/6/logs/stdio >From 271a8c2e5c8f57ab5d37f6056713dab530424470 Mon Sep 17 00:00:00 2001 From: Mehdi Amini Date: Tue, 16 Apr 2024 17:44:12 +0200 Subject: [PATCH] Revert "[Sema] Mark alias/ifunc targets used and consider mangled names" This reverts commit 2ac562ab784c6bf04e6d3026c567d3552a735668. --- clang/lib/Sema/CMakeLists.txt | 1 - clang/lib/Sema/SemaDeclAttr.cpp | 44 +-- clang/test/AST/ast-dump-attr-json.cpp | 1 - clang/test/Sema/alias-unused-win.cpp | 2 +- clang/test/Sema/alias-unused.cpp | 16 +++ .../llvm-project-overlay/clang/BUILD.bazel| 1 - 6 files changed, 19 insertions(+), 46 deletions(-) diff --git a/clang/lib/Sema/CMakeLists.txt b/clang/lib/Sema/CMakeLists.txt index a96439df664228..ab3b813a9ccd97 100644 --- a/clang/lib/Sema/CMakeLists.txt +++ b/clang/lib/Sema/CMakeLists.txt @@ -1,6 +1,5 @@ set(LLVM_LINK_COMPONENTS Core - Demangle FrontendHLSL FrontendOpenMP MC diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp index d26f130b5774ce..b7b1fbc625a150 100644 --- a/clang/lib/Sema/SemaDeclAttr.cpp +++ b/clang/lib/Sema/SemaDeclAttr.cpp @@ -45,7 +45,6 @@ #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/STLForwardCompat.h" #include "llvm/ADT/StringExtras.h" -#include "llvm/Demangle/Demangle.h" #include "llvm/IR/Assumptions.h" #include "llvm/MC/MCSectionMachO.h" #include "llvm/Support/Error.h" @@ -1984,36 +1983,6 @@ static void handleWeakRefAttr(Sema , Decl *D, const ParsedAttr ) { D->addAttr(::new (S.Context) WeakRefAttr(S.Context, AL)); } -// Mark alias/ifunc target as used. Due to name mangling, we look up the -// demangled name ignoring parameters (not supported by microsoftDemangle -// https://github.com/llvm/llvm-project/issues/88825). This should handle the -// majority of use cases while leaving namespace scope names unmarked. -static void markUsedForAliasOrIfunc(Sema , Decl *D, const ParsedAttr , -StringRef Str) { - std::unique_ptr Demangled; - if (S.getASTContext().getCXXABIKind() != TargetCXXABI::Microsoft) -Demangled.reset(llvm::itaniumDemangle(Str, /*ParseParams=*/false)); - std::unique_ptr MC(S.Context.createMangleContext()); - SmallString<256> Name; - - const DeclarationNameInfo Target( - (Demangled ? Demangled.get() : Str), AL.getLoc()); - LookupResult LR(S, Target, Sema::LookupOrdinaryName); - if (S.LookupName(LR, S.TUScope)) { -for (NamedDecl *ND : LR) { - if (MC->shouldMangleDeclName(ND)) { -llvm::raw_svector_ostream Out(Name); -Name.clear(); -MC->mangleName(GlobalDecl(ND), Out); - } else { -Name = ND->getIdentifier()->getName(); - } - if (Name == Str) -ND->markUsed(S.Context); -} - } -} - static void handleIFuncAttr(Sema , Decl *D, const ParsedAttr ) { StringRef Str; if (!S.checkStringLiteralArgumentAttr(AL, 0, Str)) @@ -2026,7 +1995,6 @@ static void handleIFuncAttr(Sema , Decl *D, const ParsedAttr ) { return; } - markUsedForAliasOrIfunc(S, D, AL, Str); D->addAttr(::new (S.Context) IFuncAttr(S.Context, AL, Str)); } @@ -2061,7 +2029,17 @@ static void handleAliasAttr(Sema , Decl *D, const ParsedAttr ) { } } - markUsedForAliasOrIfunc(S, D, AL, Str); + // Mark target used to prevent unneeded-internal-declaration warnings. + if (!S.LangOpts.CPlusPlus) { +// FIXME: demangle Str for C++, as the attribute refers to the mangled +// linkage name, not the pre-mangled identifier. +const DeclarationNameInfo target((Str), AL.getLoc()); +LookupResult LR(S, target, Sema::LookupOrdinaryName); +if (S.LookupQualifiedName(LR, S.getCurLexicalContext())) + for (NamedDecl *ND : LR) +ND->markUsed(S.Context); + } + D->addAttr(::new (S.Context) AliasAttr(S.Context, AL, Str)); } diff --git a/clang/test/AST/ast-dump-attr-json.cpp b/clang/test/AST/ast-dump-attr-json.cpp index 883e584bfedf07..051c2956abfdf7 100644 --- a/clang/test/AST/ast-dump-attr-json.cpp +++ b/clang/test/AST/ast-dump-attr-json.cpp @@ -46,7 +46,6 @@ __thread __attribute__ ((tls_model ("local-exec"))) int tls_model_var; // CHECK-NEXT:"tokLen": 11 // CHECK-NEXT: } // CHECK-NEXT: }, -// CHECK-NEXT: "isUsed": true, // CHECK-NEXT: "name": "global_decl", // CHECK-NEXT: "mangledName": "global_decl", // CHECK-NEXT: "type": { diff --git a/clang/test/Sema/alias-unused-win.cpp b/clang/test/Sema/alias-unused-win.cpp index 97d57a3bbd1e31..47c96d41175179 100644 --- a/clang/test/Sema/alias-unused-win.cpp +++ b/clang/test/Sema/alias-unused-win.cpp @@ -7,7 +7,7 @@ extern "C" { static int f(void) { return 42; } // cxx-warning{{unused function 'f'}} int g(void)