Issue error on attempt to derefernce void pointer types.

Issue #288.
This commit is contained in:
Matt Pharr
2012-06-18 19:51:19 -07:00
parent b2f6ed7209
commit bd52e86486
3 changed files with 30 additions and 5 deletions

View File

@@ -4277,11 +4277,19 @@ IndexExpr::TypeCheck() {
return NULL;
}
if (!CastType<SequentialType>(baseExprType->GetReferenceTarget()) &&
!CastType<PointerType>(baseExprType)) {
Error(pos, "Trying to index into non-array, vector, or pointer "
if (!CastType<SequentialType>(baseExprType->GetReferenceTarget())) {
if (const PointerType *pt = CastType<PointerType>(baseExprType)) {
if (Type::Equal(AtomicType::Void, pt->GetBaseType())) {
Error(pos, "Illegal to dereference void pointer type \"%s\".",
baseExprType->GetString().c_str());
return NULL;
}
}
else {
Error(pos, "Trying to index into non-array, vector, or pointer "
"type \"%s\".", baseExprType->GetString().c_str());
return NULL;
return NULL;
}
}
bool isUniform = (index->GetType()->IsUniformType() &&
@@ -7172,7 +7180,14 @@ PtrDerefExpr::TypeCheck() {
return NULL;
}
if (CastType<PointerType>(type) == NULL) {
if (const PointerType *pt = CastType<PointerType>(type)) {
if (Type::Equal(AtomicType::Void, pt->GetBaseType())) {
Error(pos, "Illegal to dereference void pointer type \"%s\".",
type->GetString().c_str());
return NULL;
}
}
else {
Error(pos, "Illegal to dereference non-pointer type \"%s\".",
type->GetString().c_str());
return NULL;

View File

@@ -0,0 +1,5 @@
// Illegal to dereference void pointer type
int foo(void * uniform ptr) {
print("%", ptr[0]);
}

View File

@@ -0,0 +1,5 @@
// Illegal to dereference void pointer type
int foo(void * uniform ptr) {
print("%", *ptr);
}