diff options
| author | Chris Lattner <sabre@nondot.org> | 2008-04-07 06:56:55 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2008-04-07 06:56:55 +0000 |
| commit | e6b27c6ecdd57c12f70c133fdaa8d3fbe63e1a43 (patch) | |
| tree | 469be12ee9783a3c97da2bb1a326762f1ec64419 /clang/lib/AST/ASTContext.cpp | |
| parent | 7460fd297dc401697f28fd540513331ff22f1345 (diff) | |
| download | bcm5719-llvm-e6b27c6ecdd57c12f70c133fdaa8d3fbe63e1a43.tar.gz bcm5719-llvm-e6b27c6ecdd57c12f70c133fdaa8d3fbe63e1a43.zip | |
simplify array compatibility testing.
llvm-svn: 49326
Diffstat (limited to 'clang/lib/AST/ASTContext.cpp')
| -rw-r--r-- | clang/lib/AST/ASTContext.cpp | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp index e781040172c..4de367551f0 100644 --- a/clang/lib/AST/ASTContext.cpp +++ b/clang/lib/AST/ASTContext.cpp @@ -1513,20 +1513,19 @@ bool ASTContext::functionTypesAreCompatible(QualType lhs, QualType rhs) { return true; } -bool ASTContext::arrayTypesAreCompatible(QualType lhs, QualType rhs) { +// C99 6.7.5.2p6 +static bool areCompatArrayTypes(ArrayType *LHS, ArrayType *RHS, ASTContext &C) { // Compatible arrays must have compatible element types - QualType ltype = lhs->getAsArrayType()->getElementType(); - QualType rtype = rhs->getAsArrayType()->getElementType(); + QualType ltype = LHS->getElementType(); + QualType rtype = RHS->getElementType(); - if (!typesAreCompatible(ltype, rtype)) - return false; - - // Compatible arrays must be the same size - if (const ConstantArrayType* LCAT = lhs->getAsConstantArrayType()) - if (const ConstantArrayType* RCAT = rhs->getAsConstantArrayType()) - return RCAT->getSize() == LCAT->getSize(); + // Constant arrays must be the same size to be compatible. + if (const ConstantArrayType* LCAT = dyn_cast<ConstantArrayType>(LHS)) + if (const ConstantArrayType* RCAT = dyn_cast<ConstantArrayType>(RHS)) + if (RCAT->getSize() != LCAT->getSize()) + return false; - return true; + return C.typesAreCompatible(QualType(LHS, 0), QualType(RHS, 0)); } /// areCompatVectorTypes - Return true if the two specified vector types are @@ -1681,7 +1680,8 @@ bool ASTContext::typesAreCompatible(QualType LHS_NC, QualType RHS_NC) { case Type::Pointer: return pointerTypesAreCompatible(LHS, RHS); case Type::ConstantArray: - return arrayTypesAreCompatible(LHS, RHS); + return areCompatArrayTypes(cast<ArrayType>(LHS), cast<ArrayType>(RHS), + *this); case Type::FunctionNoProto: return functionTypesAreCompatible(LHS, RHS); case Type::Tagged: // handle structures, unions |

