diff options
-rw-r--r-- | lib/Sema/SemaType.cpp | 5 | ||||
-rw-r--r-- | test/Sema/types.c | 9 |
2 files changed, 14 insertions, 0 deletions
diff --git a/lib/Sema/SemaType.cpp b/lib/Sema/SemaType.cpp index 2b863a735a..1e0c2d60c4 100644 --- a/lib/Sema/SemaType.cpp +++ b/lib/Sema/SemaType.cpp @@ -3779,6 +3779,11 @@ static void processTypeAttrs(TypeProcessingState &state, QualType &type, switch (attr.getKind()) { default: break; + case AttributeList::AT_may_alias: + // FIXME: This attribute needs to actually be handled, but if we ignore + // it it breaks large amounts of Linux software. + attr.setUsedAsTypeAttr(); + break; case AttributeList::AT_address_space: HandleAddressSpaceTypeAttribute(type, attr, state.getSema()); attr.setUsedAsTypeAttr(); diff --git a/test/Sema/types.c b/test/Sema/types.c index 33305abe02..332b525e33 100644 --- a/test/Sema/types.c +++ b/test/Sema/types.c @@ -41,3 +41,12 @@ int __attribute__ ((vector_size (8), vector_size (8))) v; // expected-error {{i void test(int i) { char c = (char __attribute__((align(8)))) i; // expected-error {{'align' attribute ignored when parsing type}} } + +// http://llvm.org/PR11082 +// +// FIXME: This may or may not be the correct approach (no warning or error), +// but large amounts of Linux and FreeBSD code need this attribute to not be +// a hard error in order to work correctly. +void test2(int i) { + char c = (char __attribute__((may_alias))) i; +} |