From: Eli Friedman Date: Mon, 9 Jun 2008 03:52:40 +0000 (+0000) Subject: For struct initialization, check compatibility with the unqualified X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c92e5e4e4d632343b1f5b34cbd1d583666b1f4f8;p=clang For struct initialization, check compatibility with the unqualified type; this isn't explicitly stated in the standard, but it doesn't really make sense for them to have an effect here. Fixes the included testcase, sent to me by Steve Naroff. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@52113 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaInit.cpp b/lib/Sema/SemaInit.cpp index 43adc2a82f..e2377e18ba 100644 --- a/lib/Sema/SemaInit.cpp +++ b/lib/Sema/SemaInit.cpp @@ -165,7 +165,9 @@ void InitListChecker::CheckSubElementType(InitListExpr *IList, } else if (ElemType->isScalarType()) { CheckScalarType(IList, ElemType, Index); } else if (expr->getType()->getAsRecordType() && - SemaRef->Context.typesAreCompatible(expr->getType(), ElemType)) { + SemaRef->Context.typesAreCompatible( + expr->getType().getUnqualifiedType(), + ElemType.getUnqualifiedType())) { Index++; // FIXME: Add checking } else { diff --git a/test/Sema/init-struct-qualified.c b/test/Sema/init-struct-qualified.c new file mode 100644 index 0000000000..37637e108c --- /dev/null +++ b/test/Sema/init-struct-qualified.c @@ -0,0 +1,12 @@ +// RUN: clang -fsyntax-only -verify < %s +typedef float CGFloat; +typedef struct _NSPoint { CGFloat x; CGFloat y; } NSPoint; +typedef struct _NSSize { CGFloat width; CGFloat height; } NSSize; +typedef struct _NSRect { NSPoint origin; NSSize size; } NSRect; + +extern const NSPoint NSZeroPoint; + +extern NSSize canvasSize(); +void func() { + const NSRect canvasRect = { NSZeroPoint, canvasSize() }; +}