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;
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits