diff options
-rw-r--r-- | Sema/SemaType.cpp | 8 | ||||
-rw-r--r-- | test/Sema/complex-int.c | 4 | ||||
-rw-r--r-- | test/Sema/illegal-types.c | 7 |
3 files changed, 15 insertions, 4 deletions
diff --git a/Sema/SemaType.cpp b/Sema/SemaType.cpp index c4a9c0feaf..5ba25863db 100644 --- a/Sema/SemaType.cpp +++ b/Sema/SemaType.cpp @@ -164,7 +164,7 @@ QualType Sema::GetTypeForDeclarator(Declarator &D, Scope *S) { if (T->isReferenceType()) { // C++ 8.3.2p4: There shall be no ... pointers to references ... Diag(D.getIdentifierLoc(), diag::err_illegal_decl_pointer_to_reference, - D.getIdentifier()->getName()); + D.getIdentifier() ? D.getIdentifier()->getName() : "type name"); D.setInvalidType(true); T = Context.IntTy; } @@ -177,7 +177,7 @@ QualType Sema::GetTypeForDeclarator(Declarator &D, Scope *S) { // C++ 8.3.2p4: There shall be no references to references ... Diag(D.getIdentifierLoc(), diag::err_illegal_decl_reference_to_reference, - D.getIdentifier()->getName()); + D.getIdentifier() ? D.getIdentifier()->getName() : "type name"); D.setInvalidType(true); T = RT->getReferenceeType(); } @@ -204,13 +204,13 @@ QualType Sema::GetTypeForDeclarator(Declarator &D, Scope *S) { D.setInvalidType(true); } else if (T->isFunctionType()) { Diag(D.getIdentifierLoc(), diag::err_illegal_decl_array_of_functions, - D.getIdentifier()->getName()); + D.getIdentifier() ? D.getIdentifier()->getName() : "type name"); T = Context.getPointerType(T); D.setInvalidType(true); } else if (const ReferenceType *RT = T->getAsReferenceType()) { // C++ 8.3.2p4: There shall be no ... arrays of references ... Diag(D.getIdentifierLoc(), diag::err_illegal_decl_array_of_references, - D.getIdentifier()->getName()); + D.getIdentifier() ? D.getIdentifier()->getName() : "type name"); T = RT->getReferenceeType(); D.setInvalidType(true); } else if (const RecordType *EltTy = T->getAsRecordType()) { diff --git a/test/Sema/complex-int.c b/test/Sema/complex-int.c index f0c29a94d3..b2555f5937 100644 --- a/test/Sema/complex-int.c +++ b/test/Sema/complex-int.c @@ -3,8 +3,12 @@ void a() { __complex__ int arr; __complex__ short brr; +__complex__ unsigned xx; +__complex__ signed yy; + __complex__ int result; result = arr*brr; +result = xx*yy; } diff --git a/test/Sema/illegal-types.c b/test/Sema/illegal-types.c new file mode 100644 index 0000000000..411f27262a --- /dev/null +++ b/test/Sema/illegal-types.c @@ -0,0 +1,7 @@ +// RUN: clang -fsyntax-only -verify -std=c++98 %s + +void a (void []()); // expected-error{{'type name' declared as array of functions}} +void b (void p[]()); // expected-error{{'p' declared as array of functions}} +void c (int &[]); // expected-error{{'type name' declared as array of references}} +void d (int &p[]); // expected-error{{'p' declared as array of references}} + |