forked from OSchip/llvm-project
Fix PR clang/3175: CheckAddressOfOperand does not handle references to class vars
llvm-svn: 60849
This commit is contained in:
parent
872ffce257
commit
9aa8b55d10
|
@ -2876,8 +2876,11 @@ QualType Sema::CheckAddressOfOperand(Expr *op, SourceLocation OpLoc) {
|
||||||
<< "register variable" << op->getSourceRange();
|
<< "register variable" << op->getSourceRange();
|
||||||
return QualType();
|
return QualType();
|
||||||
}
|
}
|
||||||
} else if (isa<OverloadedFunctionDecl>(dcl))
|
} else if (isa<OverloadedFunctionDecl>(dcl)) {
|
||||||
return Context.OverloadTy;
|
return Context.OverloadTy;
|
||||||
|
} else if (isa<FieldDecl>(dcl)) {
|
||||||
|
// Okay: we can take the address of a field.
|
||||||
|
}
|
||||||
else
|
else
|
||||||
assert(0 && "Unknown/unexpected decl type");
|
assert(0 && "Unknown/unexpected decl type");
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
// RUN: clang -fsyntax-only -verify %S
|
||||||
|
// PR clang/3175
|
||||||
|
|
||||||
|
void bar(int*);
|
||||||
|
|
||||||
|
class c {
|
||||||
|
int var;
|
||||||
|
static int svar;
|
||||||
|
void foo() {
|
||||||
|
bar(&var);
|
||||||
|
bar(&svar);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void wibble() {
|
||||||
|
bar(&var); // expected-error{{invalid use of member 'var' in static member function}}
|
||||||
|
bar(&svar);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
enum E {
|
||||||
|
Enumerator
|
||||||
|
};
|
||||||
|
|
||||||
|
void test() {
|
||||||
|
(void)&Enumerator; // expected-error{{address expression must be an lvalue or a function designator}}
|
||||||
|
}
|
||||||
|
|
||||||
|
template<int N>
|
||||||
|
void test2() {
|
||||||
|
(void)&N; // expected-error{{address expression must be an lvalue or a function designator}}
|
||||||
|
}
|
Loading…
Reference in New Issue