<div class="gmail_quote">On Thu, Jun 17, 2010 at 2:45 PM, Fariborz Jahanian <span dir="ltr"><<a href="mailto:fjahanian@apple.com">fjahanian@apple.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Author: fjahanian<br>
Date: Thu Jun 17 16:45:48 2010<br>
New Revision: 106242<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=106242&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=106242&view=rev</a><br>
Log:<br>
Do not treat @selector as lvalue (unlike g++).<br>
Patch by Nico Weber (pr7390).<br>
<br>
Added:<br>
    cfe/trunk/test/CodeGenCXX/<a href="http://sel-address.mm" target="_blank">sel-address.mm</a><br>
Modified:<br>
    cfe/trunk/lib/AST/Expr.cpp<br>
    cfe/trunk/lib/Sema/SemaExpr.cpp<br>
    cfe/trunk/test/CodeGenObjCXX/<a href="http://selactor-expr-lvalue.mm" target="_blank">selactor-expr-lvalue.mm</a><br>
<br>
Modified: cfe/trunk/lib/AST/Expr.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/Expr.cpp?rev=106242&r1=106241&r2=106242&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/Expr.cpp?rev=106242&r1=106241&r2=106242&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/lib/AST/Expr.cpp (original)<br>
+++ cfe/trunk/lib/AST/Expr.cpp Thu Jun 17 16:45:48 2010<br>
@@ -1194,7 +1194,6 @@<br>
   case ObjCIsaExprClass:<br>
   case StringLiteralClass:  // C99 6.5.1p4<br>
   case ObjCEncodeExprClass: // @encode behaves like its string in every way.<br>
-  case ObjCSelectorExprClass: // @selector<br>
     return LV_Valid;<br>
   case ArraySubscriptExprClass: // C99 6.5.3p4 (e1[e2] == (*((e1)+(e2))))<br>
     // For vectors, make sure base is an lvalue (i.e. not a function call).<br>
<br>
Modified: cfe/trunk/lib/Sema/SemaExpr.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=106242&r1=106241&r2=106242&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=106242&r1=106241&r2=106242&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/lib/Sema/SemaExpr.cpp (original)<br>
+++ cfe/trunk/lib/Sema/SemaExpr.cpp Thu Jun 17 16:45:48 2010<br>
@@ -6060,6 +6060,8 @@<br>
       << op->getType() << op->getSourceRange();<br>
     if (isSFINAEContext())<br>
       return QualType();<br>
+  } else if (isa<ObjCSelectorExpr>(op)) {<br>
+      return Context.getPointerType(op->getType());<br>
   } else if (lval != Expr::LV_Valid && lval != Expr::LV_IncompleteVoidType) {<br>
     // C99 6.5.3.2p1<br>
     // The operand must be either an l-value or a function designator<br>
<br>
Added: cfe/trunk/test/CodeGenCXX/<a href="http://sel-address.mm" target="_blank">sel-address.mm</a><br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/sel-address.mm?rev=106242&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/sel-address.mm?rev=106242&view=auto</a><br>

==============================================================================<br>
--- cfe/trunk/test/CodeGenCXX/<a href="http://sel-address.mm" target="_blank">sel-address.mm</a> (added)<br>
+++ cfe/trunk/test/CodeGenCXX/<a href="http://sel-address.mm" target="_blank">sel-address.mm</a> Thu Jun 17 16:45:48 2010<br>
@@ -0,0 +1,14 @@<br>
+// RUN: %clang_cc1 %s -verify -emit-llvm -o %t<br>
+// pr7390<br>
+<br>
+void f(const SEL& v2) {}<br>
+void g() {<br>
+  f(@selector(dealloc));<br>
+<br>
+  SEL s = @selector(dealloc);<br>
+ SEL* ps = &s;<br>
+<br>
+ @selector(dealloc) = s;  // expected-error {{expression is not assignable}}<br>
+<br>
+ SEL* ps2 = &@selector(dealloc);<br>
+}<br>
<br>
Modified: cfe/trunk/test/CodeGenObjCXX/<a href="http://selactor-expr-lvalue.mm" target="_blank">selactor-expr-lvalue.mm</a><br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjCXX/selactor-expr-lvalue.mm?rev=106242&r1=106241&r2=106242&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjCXX/selactor-expr-lvalue.mm?rev=106242&r1=106241&r2=106242&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/test/CodeGenObjCXX/<a href="http://selactor-expr-lvalue.mm" target="_blank">selactor-expr-lvalue.mm</a> (original)<br>
+++ cfe/trunk/test/CodeGenObjCXX/<a href="http://selactor-expr-lvalue.mm" target="_blank">selactor-expr-lvalue.mm</a> Thu Jun 17 16:45:48 2010<br>
@@ -2,7 +2,7 @@<br>
 // PR7390<br>
<br>
 @interface NSObject {}<br>
-- (void)respondsToSelector:(SEL&)s : (SEL*)s1;<br>
+- (void)respondsToSelector:(const SEL&)s : (SEL*)s1;<br></blockquote><div><br></div><div>Shouldn't non-const SEL references still work?</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

 - (void) setPriority:(int)p;<br>
 - (void)Meth;<br>
 @end<br>
@@ -12,5 +12,5 @@<br>
     [self respondsToSelector:@selector(setPriority:) : &@selector(setPriority:)];<br>
 }<br>
 - (void) setPriority:(int)p{}<br>
-- (void)respondsToSelector:(SEL&)s : (SEL*)s1 {}<br>
+- (void)respondsToSelector:(const SEL&)s : (SEL*)s1 {}<br>
 @end<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br>