From 6fea8d2e42a53a1c03e2e1ced68dda8a36e09153 Mon Sep 17 00:00:00 2001 From: Nuno Lopes Date: Tue, 16 Dec 2008 22:58:26 +0000 Subject: [PATCH] fix PR 3222: allow one to get the address of a global function in C++ git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@61111 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaExpr.cpp | 6 ++++-- test/SemaCXX/address-of.cpp | 6 +++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp index affe2ae240..cdaa2fc49c 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/lib/Sema/SemaExpr.cpp @@ -2889,7 +2889,7 @@ QualType Sema::CheckAddressOfOperand(Expr *op, SourceLocation OpLoc) { } NamedDecl *dcl = getPrimaryDecl(op); Expr::isLvalueResult lval = op->isLvalue(Context); - + printf("oleee\n"); if (lval != Expr::LV_Valid) { // C99 6.5.3.2p1 if (!dcl || !isa(dcl)) {// allow function designators // FIXME: emit more specific diag... @@ -2922,8 +2922,10 @@ QualType Sema::CheckAddressOfOperand(Expr *op, SourceLocation OpLoc) { return Context.OverloadTy; } else if (isa(dcl)) { // Okay: we can take the address of a field. + } else if (isa(dcl)) { + // Okay: we can take the address of a function. } - else + else assert(0 && "Unknown/unexpected decl type"); } diff --git a/test/SemaCXX/address-of.cpp b/test/SemaCXX/address-of.cpp index 5451f32688..3d0e57f6e3 100644 --- a/test/SemaCXX/address-of.cpp +++ b/test/SemaCXX/address-of.cpp @@ -1,4 +1,4 @@ -// RUN: clang -fsyntax-only -verify %S +// RUN: clang -fsyntax-only -verify %s // PR clang/3175 void bar(int*); @@ -29,3 +29,7 @@ template void test2() { (void)&N; // expected-error{{address expression must be an lvalue or a function designator}} } + +// PR clang/3222 +void xpto(); +void (*xyz)(void) = &xpto; -- 2.40.0