From: Anton Bikineev Date: Wed, 7 Aug 2019 11:12:43 +0000 (+0000) Subject: [clang] Fix mismatched args constructing AddressSpaceAttr. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8968c606054aa7aa193931ae3940dbfa1efea410;p=clang [clang] Fix mismatched args constructing AddressSpaceAttr. Differential Revision: https://reviews.llvm.org/D65589 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@368152 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaType.cpp b/lib/Sema/SemaType.cpp index 00e2a0cdc3..37286158a0 100644 --- a/lib/Sema/SemaType.cpp +++ b/lib/Sema/SemaType.cpp @@ -5978,9 +5978,9 @@ static void HandleAddressSpaceTypeAttribute(QualType &Type, } ASTContext &Ctx = S.Context; - auto *ASAttr = ::new (Ctx) AddressSpaceAttr( - Attr.getRange(), Ctx, Attr.getAttributeSpellingListIndex(), - static_cast(ASIdx)); + auto *ASAttr = ::new (Ctx) + AddressSpaceAttr(Attr.getRange(), Ctx, static_cast(ASIdx), + Attr.getAttributeSpellingListIndex()); // If the expression is not value dependent (not templated), then we can // apply the address space qualifiers just to the equivalent type. diff --git a/unittests/AST/ASTTraverserTest.cpp b/unittests/AST/ASTTraverserTest.cpp index cddb219a79..69812cb8d2 100644 --- a/unittests/AST/ASTTraverserTest.cpp +++ b/unittests/AST/ASTTraverserTest.cpp @@ -139,6 +139,8 @@ struct templ { }; +void parmvardecl_attr(struct A __attribute__((address_space(19)))*); + )cpp"); const FunctionDecl *Func = getFunctionNode(AST.get(), "func"); @@ -220,5 +222,16 @@ FullComment R"cpp( TemplateArgument )cpp"); + + Func = getFunctionNode(AST.get(), "parmvardecl_attr"); + + const auto *Parm = Func->getParamDecl(0); + const auto TL = Parm->getTypeSourceInfo()->getTypeLoc(); + ASSERT_TRUE(TL.getType()->isPointerType()); + + const auto ATL = TL.getNextTypeLoc().getAs(); + const auto *AS = cast(ATL.getAttr()); + EXPECT_EQ(toTargetAddressSpace(static_cast(AS->getAddressSpace())), + 19u); } } // namespace clang