[cfe-commits] r70307 - in /cfe/trunk: lib/Sema/SemaExpr.cpp test/Sema/c89.c test/SemaCXX/member-pointer.cpp
Eli Friedman
eli.friedman at gmail.com
Tue Apr 28 10:59:10 PDT 2009
Author: efriedma
Date: Tue Apr 28 12:59:09 2009
New Revision: 70307
URL: http://llvm.org/viewvc/llvm-project?rev=70307&view=rev
Log:
Fix a minor edge case in C89 mode related to the definition of a
"function designator".
(This causes a minor glitch in the
diagnostics for C++ member pointers, but we weren't printing the
right diagnostic there anyway.)
Modified:
cfe/trunk/lib/Sema/SemaExpr.cpp
cfe/trunk/test/Sema/c89.c
cfe/trunk/test/SemaCXX/member-pointer.cpp
Modified: cfe/trunk/lib/Sema/SemaExpr.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=70307&r1=70306&r2=70307&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaExpr.cpp (original)
+++ cfe/trunk/lib/Sema/SemaExpr.cpp Tue Apr 28 12:59:09 2009
@@ -4095,7 +4095,7 @@
if (lval != Expr::LV_Valid) { // C99 6.5.3.2p1
// The operand must be either an l-value or a function designator
- if (!dcl || !isa<FunctionDecl>(dcl)) {
+ if (!op->getType()->isFunctionType()) {
// FIXME: emit more specific diag...
Diag(OpLoc, diag::err_typecheck_invalid_lvalue_addrof)
<< op->getSourceRange();
Modified: cfe/trunk/test/Sema/c89.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/c89.c?rev=70307&r1=70306&r2=70307&view=diff
==============================================================================
--- cfe/trunk/test/Sema/c89.c (original)
+++ cfe/trunk/test/Sema/c89.c Tue Apr 28 12:59:09 2009
@@ -78,3 +78,5 @@
int b = 1[test13a().X]; /* expected-warning {{ISO C90 does not allow subscripting non-lvalue array}} */
}
+/* Make sure we allow *test14 as a "function designator" */
+int test14() { return (&*test14)(); }
Modified: cfe/trunk/test/SemaCXX/member-pointer.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/member-pointer.cpp?rev=70307&r1=70306&r2=70307&view=diff
==============================================================================
--- cfe/trunk/test/SemaCXX/member-pointer.cpp (original)
+++ cfe/trunk/test/SemaCXX/member-pointer.cpp Tue Apr 28 12:59:09 2009
@@ -71,7 +71,7 @@
void (HasMembers::*pmf)() = &HasMembers::f;
void (*pnf)() = &Fake::f;
- &hm.f; // expected-error {{address expression must be an lvalue or a function designator}}
+ &hm.f; // FIXME: needs diagnostic expected-warning{{result unused}}
void (HasMembers::*pmgv)() = &HasMembers::g;
void (HasMembers::*pmgi)(int) = &HasMembers::g;
More information about the cfe-commits
mailing list