summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2008-07-25 18:07:19 +0000
committerChris Lattner <sabre@nondot.org>2008-07-25 18:07:19 +0000
commitec8996d7718b09ac845256014223bc629f5913b7 (patch)
tree73dcb1feadcd617e5587b1aeaf430b92a5b5c758 /clang
parent542cd5d3f974db68ba08f4a6d4742a39deea88e6 (diff)
downloadbcm5719-llvm-ec8996d7718b09ac845256014223bc629f5913b7.tar.gz
bcm5719-llvm-ec8996d7718b09ac845256014223bc629f5913b7.zip
Add support for __extension__ as an lvalue. rdar://6097308
llvm-svn: 54033
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/AST/Expr.cpp3
-rw-r--r--clang/test/Sema/exprs.c6
2 files changed, 8 insertions, 1 deletions
diff --git a/clang/lib/AST/Expr.cpp b/clang/lib/AST/Expr.cpp
index 6c7d170d036..7eab87ff79e 100644
--- a/clang/lib/AST/Expr.cpp
+++ b/clang/lib/AST/Expr.cpp
@@ -415,7 +415,8 @@ Expr::isLvalueResult Expr::isLvalue() const {
return LV_Valid; // C99 6.5.3p4
if (cast<UnaryOperator>(this)->getOpcode() == UnaryOperator::Real ||
- cast<UnaryOperator>(this)->getOpcode() == UnaryOperator::Imag)
+ cast<UnaryOperator>(this)->getOpcode() == UnaryOperator::Imag ||
+ cast<UnaryOperator>(this)->getOpcode() == UnaryOperator::Extension)
return cast<UnaryOperator>(this)->getSubExpr()->isLvalue(); // GNU.
break;
case ParenExprClass: // C99 6.5.1p5
diff --git a/clang/test/Sema/exprs.c b/clang/test/Sema/exprs.c
index 01758772874..fc506f7a2b3 100644
--- a/clang/test/Sema/exprs.c
+++ b/clang/test/Sema/exprs.c
@@ -9,3 +9,9 @@ _Complex double test2() {
return 1.0if; // expected-warning {{imaginary constants are an extension}}
}
+// rdar://6097308
+void test3() {
+ int x;
+ (__extension__ x) = 10;
+}
+
OpenPOWER on IntegriCloud