summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaDecl.cpp
diff options
context:
space:
mode:
authorNuno Lopes <nunoplopes@sapo.pt>2009-12-17 11:35:26 +0000
committerNuno Lopes <nunoplopes@sapo.pt>2009-12-17 11:35:26 +0000
commite9823fab83ac05476ce3bdcd1dd0559d24bc4d23 (patch)
tree76915a1f319a69cfbce6bce3c8f65f9e8268ef5e /clang/lib/Sema/SemaDecl.cpp
parent641fdce2359763bbc831255c2f88cfa19e960831 (diff)
downloadbcm5719-llvm-e9823fab83ac05476ce3bdcd1dd0559d24bc4d23.tar.gz
bcm5719-llvm-e9823fab83ac05476ce3bdcd1dd0559d24bc4d23.zip
implement PR3962: diagnose more faulty cases of usage of the restrict qualifier. this also removes a FIXME
llvm-svn: 91601
Diffstat (limited to 'clang/lib/Sema/SemaDecl.cpp')
-rw-r--r--clang/lib/Sema/SemaDecl.cpp10
1 files changed, 9 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index ee4bd226768..6ed9f7a772b 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -1445,7 +1445,6 @@ bool Sema::CheckParmsForFunctionDef(FunctionDecl *FD) {
Sema::DeclPtrTy Sema::ParsedFreeStandingDeclSpec(Scope *S, DeclSpec &DS) {
// FIXME: Error on auto/register at file scope
// FIXME: Error on inline/virtual/explicit
- // FIXME: Error on invalid restrict
// FIXME: Warn on useless __thread
// FIXME: Warn on useless const/volatile
// FIXME: Warn on useless static/extern/typedef/private_extern/mutable
@@ -1467,6 +1466,15 @@ Sema::DeclPtrTy Sema::ParsedFreeStandingDeclSpec(Scope *S, DeclSpec &DS) {
Tag = dyn_cast<TagDecl>(TagD);
}
+ if (unsigned TypeQuals = DS.getTypeQualifiers()) {
+ // Enforce C99 6.7.3p2: "Types other than pointer types derived from object
+ // or incomplete types shall not be restrict-qualified."
+ if (TypeQuals & DeclSpec::TQ_restrict)
+ Diag(DS.getRestrictSpecLoc(),
+ diag::err_typecheck_invalid_restrict_not_pointer_noarg)
+ << DS.getSourceRange();
+ }
+
if (DS.isFriendSpecified()) {
// If we're dealing with a class template decl, assume that the
// template routines are handling it.
OpenPOWER on IntegriCloud