]> granicus.if.org Git - clang/commitdiff
Fix crash when an incorrect redeclaration only differs in __unaligned type-qualifier
authorRoger Ferrer Ibanez <roger.ferreribanez@arm.com>
Fri, 24 Feb 2017 08:41:09 +0000 (08:41 +0000)
committerRoger Ferrer Ibanez <roger.ferreribanez@arm.com>
Fri, 24 Feb 2017 08:41:09 +0000 (08:41 +0000)
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
test/Sema/unaligned-qualifier.c [new file with mode: 0644]

index 103c7e191cc724fa21dd189498d7b1ec8362a3f2..922d74e487ac0b7a6a1a410310d20fc4472f2c43 100644 (file)
@@ -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 (file)
index 0000000..3a66c4f
--- /dev/null
@@ -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 *'}}