From 461a2c064078d0cca4959dd6b6fa09e59cc70547 Mon Sep 17 00:00:00 2001 From: Anders Carlsson <andersca@mac.com> Date: Sat, 14 Nov 2009 21:26:41 +0000 Subject: [PATCH] Always build a builtin operator expression for the __extension__ unary operator. llvm-svn: 88811 --- clang/lib/Sema/SemaExpr.cpp | 3 ++- clang/test/SemaCXX/overloaded-builtin-operators.cpp | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index b311fda2d3c4..0d4ce609136f 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -5711,7 +5711,8 @@ Action::OwningExprResult Sema::BuildUnaryOp(Scope *S, SourceLocation OpLoc, UnaryOperator::Opcode Opc, ExprArg input) { Expr *Input = (Expr*)input.get(); - if (getLangOptions().CPlusPlus && Input->getType()->isOverloadableType()) { + if (getLangOptions().CPlusPlus && Input->getType()->isOverloadableType() && + Opc != UnaryOperator::Extension) { // Find all of the overloaded operators visible from this // point. We perform both an operator-name lookup from the local // scope and an argument-dependent lookup based on the types of diff --git a/clang/test/SemaCXX/overloaded-builtin-operators.cpp b/clang/test/SemaCXX/overloaded-builtin-operators.cpp index 89ac29adc730..fd0cbc6c8643 100644 --- a/clang/test/SemaCXX/overloaded-builtin-operators.cpp +++ b/clang/test/SemaCXX/overloaded-builtin-operators.cpp @@ -185,3 +185,6 @@ int test_pr5432() { return a[X][X]; } +void f() { + (void)__extension__(A()); +}