summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorNico Rieck <nico.rieck@gmail.com>2014-12-04 23:30:25 +0000
committerNico Rieck <nico.rieck@gmail.com>2014-12-04 23:30:25 +0000
commit3e1ee83626a514d29d134497e72077ceba3d84fd (patch)
tree0d8d1c7ec78183f754350840fff3f999669501b9 /clang
parentc2576d5464eeb574f565cef028cad9375ef97979 (diff)
downloadbcm5719-llvm-3e1ee83626a514d29d134497e72077ceba3d84fd.tar.gz
bcm5719-llvm-3e1ee83626a514d29d134497e72077ceba3d84fd.zip
Recognize __unaligned keyword after type specifier
The __unaligned keyword can appear after a struct definition: struct foo {...} __unaligned *x; llvm-svn: 223412
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/Parse/ParseDeclCXX.cpp1
-rw-r--r--clang/test/SemaCXX/MicrosoftExtensions.cpp1
2 files changed, 2 insertions, 0 deletions
diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp
index 79ae878520b..85f6303970a 100644
--- a/clang/lib/Parse/ParseDeclCXX.cpp
+++ b/clang/lib/Parse/ParseDeclCXX.cpp
@@ -1095,6 +1095,7 @@ bool Parser::isValidAfterTypeSpecifier(bool CouldBeBitfield) {
case tok::kw_volatile: // struct foo {...} volatile x;
case tok::kw_restrict: // struct foo {...} restrict x;
case tok::kw__Atomic: // struct foo {...} _Atomic x;
+ case tok::kw___unaligned: // struct foo {...} __unaligned *x;
// Function specifiers
// Note, no 'explicit'. An explicit function must be either a conversion
// operator or a constructor. Either way, it can't have a return type.
diff --git a/clang/test/SemaCXX/MicrosoftExtensions.cpp b/clang/test/SemaCXX/MicrosoftExtensions.cpp
index ec3dfce52c1..57d6f0d6bef 100644
--- a/clang/test/SemaCXX/MicrosoftExtensions.cpp
+++ b/clang/test/SemaCXX/MicrosoftExtensions.cpp
@@ -79,6 +79,7 @@ struct M {
// __unaligned handling
typedef char __unaligned *aligned_type;
+typedef struct UnalignedTag { int f; } __unaligned *aligned_type2;
template<typename T> void h1(T (__stdcall M::* const )()) { }
OpenPOWER on IntegriCloud