summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2009-06-26 19:16:07 +0000
committerAnders Carlsson <andersca@mac.com>2009-06-26 19:16:07 +0000
commit364035d1a821ba70e38e3b5ccdc91dd1224316c6 (patch)
tree91daa53dd86f92701d5684a4d8332c52ab5475a2 /clang/lib/Sema
parent7f82a19fbf705ae2651888052f58eb1febcf270b (diff)
downloadbcm5719-llvm-364035d1a821ba70e38e3b5ccdc91dd1224316c6.tar.gz
bcm5719-llvm-364035d1a821ba70e38e3b5ccdc91dd1224316c6.zip
An auto variable can't appear in its own initializer.
llvm-svn: 74312
Diffstat (limited to 'clang/lib/Sema')
-rw-r--r--clang/lib/Sema/SemaExpr.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp
index 3d223213865..2f843066547 100644
--- a/clang/lib/Sema/SemaExpr.cpp
+++ b/clang/lib/Sema/SemaExpr.cpp
@@ -627,6 +627,12 @@ Sema::OwningExprResult
Sema::BuildDeclRefExpr(NamedDecl *D, QualType Ty, SourceLocation Loc,
bool TypeDependent, bool ValueDependent,
const CXXScopeSpec *SS) {
+ if (Context.getCanonicalType(Ty) == Context.UndeducedAutoTy) {
+ Diag(Loc,
+ diag::err_auto_variable_cannot_appear_in_own_initializer)
+ << D->getDeclName();
+ return ExprError();
+ }
if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {
if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(CurContext)) {
OpenPOWER on IntegriCloud