summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang/lib/Sema/SemaType.cpp6
-rw-r--r--clang/unittests/AST/ASTTraverserTest.cpp13
2 files changed, 16 insertions, 3 deletions
diff --git a/clang/lib/Sema/SemaType.cpp b/clang/lib/Sema/SemaType.cpp
index 00e2a0cdc3a..37286158a02 100644
--- a/clang/lib/Sema/SemaType.cpp
+++ b/clang/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<unsigned>(ASIdx));
+ auto *ASAttr = ::new (Ctx)
+ AddressSpaceAttr(Attr.getRange(), Ctx, static_cast<unsigned>(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/clang/unittests/AST/ASTTraverserTest.cpp b/clang/unittests/AST/ASTTraverserTest.cpp
index cddb219a79f..69812cb8d21 100644
--- a/clang/unittests/AST/ASTTraverserTest.cpp
+++ b/clang/unittests/AST/ASTTraverserTest.cpp
@@ -139,6 +139,8 @@ struct templ<int>
{
};
+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<AttributedTypeLoc>();
+ const auto *AS = cast<AddressSpaceAttr>(ATL.getAttr());
+ EXPECT_EQ(toTargetAddressSpace(static_cast<LangAS>(AS->getAddressSpace())),
+ 19u);
}
} // namespace clang
OpenPOWER on IntegriCloud