[clang] 063a43b - [ObjC] Fix an assertion failure in EvaluateLValue

Akira Hatanaka via cfe-commits cfe-commits at lists.llvm.org
Tue Nov 15 14:42:02 PST 2022


Author: Akira Hatanaka
Date: 2022-11-15T14:41:28-08:00
New Revision: 063a43b4fd9f869d57c20145302eb41068bfb54e

URL: https://github.com/llvm/llvm-project/commit/063a43b4fd9f869d57c20145302eb41068bfb54e
DIFF: https://github.com/llvm/llvm-project/commit/063a43b4fd9f869d57c20145302eb41068bfb54e.diff

LOG: [ObjC] Fix an assertion failure in EvaluateLValue

Look through parentheses when determining whether the expression is a
@selector expression.

Added: 
    

Modified: 
    clang/lib/AST/ExprConstant.cpp
    clang/test/SemaObjCXX/sel-address.mm

Removed: 
    


################################################################################
diff  --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp
index 34e75723b3f30..e17df5da5cb2d 100644
--- a/clang/lib/AST/ExprConstant.cpp
+++ b/clang/lib/AST/ExprConstant.cpp
@@ -8228,7 +8228,7 @@ static bool EvaluateLValue(const Expr *E, LValue &Result, EvalInfo &Info,
                            bool InvalidBaseOK) {
   assert(!E->isValueDependent());
   assert(E->isGLValue() || E->getType()->isFunctionType() ||
-         E->getType()->isVoidType() || isa<ObjCSelectorExpr>(E));
+         E->getType()->isVoidType() || isa<ObjCSelectorExpr>(E->IgnoreParens()));
   return LValueExprEvaluator(Info, Result, InvalidBaseOK).Visit(E);
 }
 

diff  --git a/clang/test/SemaObjCXX/sel-address.mm b/clang/test/SemaObjCXX/sel-address.mm
index a1209abd4e687..e5661af341691 100644
--- a/clang/test/SemaObjCXX/sel-address.mm
+++ b/clang/test/SemaObjCXX/sel-address.mm
@@ -15,5 +15,6 @@ void h() {
 
   // Shouldn't crash.
   g(&@selector(foo));
+  g(&(@selector(foo)));
 }
 


        


More information about the cfe-commits mailing list