aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Sema/SemaType.cpp8
-rw-r--r--test/Sema/complex-int.c4
-rw-r--r--test/Sema/illegal-types.c7
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}}
+