git: da2012af42fb - main - Revert clang change that breaks CTF on aarch64
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sun, 12 Dec 2021 20:12:18 UTC
The branch main has been updated by dim: URL: https://cgit.FreeBSD.org/src/commit/?id=da2012af42fb704365cfaff7ae68fc7de59981da commit da2012af42fb704365cfaff7ae68fc7de59981da Author: Dimitry Andric <dim@FreeBSD.org> AuthorDate: 2021-12-12 20:11:40 +0000 Commit: Dimitry Andric <dim@FreeBSD.org> CommitDate: 2021-12-12 20:11:40 +0000 Revert clang change that breaks CTF on aarch64 Revert commit e655e74a318e from llvm git (by Peter Collingbourne): AST: Create __va_list in the std namespace even in C. This ensures that the mangled type names match between C and C++, which is significant when using -fsanitize=cfi-icall. Ideally we wouldn't have created this namespace at all, but it's now part of the ABI (e.g. in mangled names), so we can't change it. Differential Revision: https://reviews.llvm.org/D104830 As reported by Jessica in https://reviews.llvm.org/D104830#3129527, this upstream change is implemented in such a way that it breaks DTrace's CTF. Since a proper fix has not yet been forthcoming, and we are unaffected by the (CFI-related) problem upstream was trying to address, revert the change for now. Requested by: jrtc27 MFC after: 3 days --- contrib/llvm-project/clang/lib/AST/ASTContext.cpp | 26 +++++++++++------------ 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/contrib/llvm-project/clang/lib/AST/ASTContext.cpp b/contrib/llvm-project/clang/lib/AST/ASTContext.cpp index 0e163f3161a3..9a51cace3c14 100644 --- a/contrib/llvm-project/clang/lib/AST/ASTContext.cpp +++ b/contrib/llvm-project/clang/lib/AST/ASTContext.cpp @@ -8002,21 +8002,19 @@ static TypedefDecl *CreateVoidPtrBuiltinVaListDecl(const ASTContext *Context) { static TypedefDecl * CreateAArch64ABIBuiltinVaListDecl(const ASTContext *Context) { + // struct __va_list RecordDecl *VaListTagDecl = Context->buildImplicitRecord("__va_list"); - // namespace std { struct __va_list { - // Note that we create the namespace even in C. This is intentional so that - // the type is consistent between C and C++, which is important in cases where - // the types need to match between translation units (e.g. with - // -fsanitize=cfi-icall). Ideally we wouldn't have created this namespace at - // all, but it's now part of the ABI (e.g. in mangled names), so we can't - // change it. - auto *NS = NamespaceDecl::Create( - const_cast<ASTContext &>(*Context), Context->getTranslationUnitDecl(), - /*Inline*/ false, SourceLocation(), SourceLocation(), - &Context->Idents.get("std"), - /*PrevDecl*/ nullptr); - NS->setImplicit(); - VaListTagDecl->setDeclContext(NS); + if (Context->getLangOpts().CPlusPlus) { + // namespace std { struct __va_list { + NamespaceDecl *NS; + NS = NamespaceDecl::Create(const_cast<ASTContext &>(*Context), + Context->getTranslationUnitDecl(), + /*Inline*/ false, SourceLocation(), + SourceLocation(), &Context->Idents.get("std"), + /*PrevDecl*/ nullptr); + NS->setImplicit(); + VaListTagDecl->setDeclContext(NS); + } VaListTagDecl->startDefinition();