[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