summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2008-09-03 21:54:21 +0000
committerDaniel Dunbar <daniel@zuster.org>2008-09-03 21:54:21 +0000
commit0ff4192f3a37d05878c451312ee5fa42787da50f (patch)
tree2eec00e76dd655b7a5df332a4a474c962917b177 /clang
parentb44763456c0b0ec2990a68663405088463746866 (diff)
downloadbcm5719-llvm-0ff4192f3a37d05878c451312ee5fa42787da50f.tar.gz
bcm5719-llvm-0ff4192f3a37d05878c451312ee5fa42787da50f.zip
Set register storage class correctly for function parameters.
- PR2730 llvm-svn: 55739
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/Sema/SemaDecl.cpp8
-rw-r--r--clang/test/Sema/expr-address-of.c3
2 files changed, 8 insertions, 3 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index cc1ace7b339..b45611ca59b 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -1421,8 +1421,10 @@ Sema::ActOnParamDeclarator(Scope *S, Declarator &D) {
const DeclSpec &DS = D.getDeclSpec();
// Verify C99 6.7.5.3p2: The only SCS allowed is 'register'.
- if (DS.getStorageClassSpec() != DeclSpec::SCS_unspecified &&
- DS.getStorageClassSpec() != DeclSpec::SCS_register) {
+ VarDecl::StorageClass StorageClass = VarDecl::None;
+ if (DS.getStorageClassSpec() == DeclSpec::SCS_register) {
+ StorageClass = VarDecl::Register;
+ } else if (DS.getStorageClassSpec() != DeclSpec::SCS_unspecified) {
Diag(DS.getStorageClassSpecLoc(),
diag::err_invalid_storage_class_in_func_decl);
D.getMutableDeclSpec().ClearStorageClassSpecs();
@@ -1485,7 +1487,7 @@ Sema::ActOnParamDeclarator(Scope *S, Declarator &D) {
ParmVarDecl *New = ParmVarDecl::Create(Context, CurContext,
D.getIdentifierLoc(), II,
- parmDeclType, VarDecl::None,
+ parmDeclType, StorageClass,
0, 0);
if (D.getInvalidType())
diff --git a/clang/test/Sema/expr-address-of.c b/clang/test/Sema/expr-address-of.c
index 20390429dd2..58bc540a30d 100644
--- a/clang/test/Sema/expr-address-of.c
+++ b/clang/test/Sema/expr-address-of.c
@@ -86,3 +86,6 @@ void f5() {
int *_dummy1 = &(arr + 1); // expected-error {{address expression must be an lvalue or a function designator}}
}
+void f6(register int x) {
+ int * dummy0 = &x; // expected-error {{address of register variable requested}}
+}
OpenPOWER on IntegriCloud