From 2fc3d9627ab2802c8831e6f62386ef92e99a095a Mon Sep 17 00:00:00 2001 From: Roger Ferrer Ibanez Date: Fri, 24 Feb 2017 08:41:09 +0000 Subject: [PATCH] Fix crash when an incorrect redeclaration only differs in __unaligned type-qualifier Fix an assertion that is hit when a redeclaration with differing types only differs in the unaligned type-qualifier. Differential Revision: https://reviews.llvm.org/D29986 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@296099 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/AST/ASTContext.cpp | 3 ++- test/Sema/unaligned-qualifier.c | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 test/Sema/unaligned-qualifier.c diff --git a/lib/AST/ASTContext.cpp b/lib/AST/ASTContext.cpp index 103c7e191c..922d74e487 100644 --- a/lib/AST/ASTContext.cpp +++ b/lib/AST/ASTContext.cpp @@ -8077,7 +8077,8 @@ QualType ASTContext::mergeTypes(QualType LHS, QualType RHS, // mismatch. if (LQuals.getCVRQualifiers() != RQuals.getCVRQualifiers() || LQuals.getAddressSpace() != RQuals.getAddressSpace() || - LQuals.getObjCLifetime() != RQuals.getObjCLifetime()) + LQuals.getObjCLifetime() != RQuals.getObjCLifetime() || + LQuals.hasUnaligned() != RQuals.hasUnaligned()) return QualType(); // Exactly one GC qualifier difference is allowed: __strong is diff --git a/test/Sema/unaligned-qualifier.c b/test/Sema/unaligned-qualifier.c new file mode 100644 index 0000000000..3a66c4ffbb --- /dev/null +++ b/test/Sema/unaligned-qualifier.c @@ -0,0 +1,4 @@ +// RUN: %clang_cc1 %s -verify -fsyntax-only -fms-extensions + +int __unaligned * p1; // expected-note {{previous definition is here}} +int * p1; // expected-error {{redefinition of 'p1' with a different type: 'int *' vs '__unaligned int *'}} -- 2.40.0