summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorBenjamin Kramer <benny.kra@googlemail.com>2012-11-23 17:04:52 +0000
committerBenjamin Kramer <benny.kra@googlemail.com>2012-11-23 17:04:52 +0000
commit90633e39fcc2a1ac9f5b0f38bc32f7d05146b685 (patch)
tree136a3b74e2530365016de05d9c755480a93cd033 /clang
parent9bb247813aae7cda7b883f1bd0bff2697877dbb1 (diff)
downloadbcm5719-llvm-90633e39fcc2a1ac9f5b0f38bc32f7d05146b685.tar.gz
bcm5719-llvm-90633e39fcc2a1ac9f5b0f38bc32f7d05146b685.zip
Sema: Provide a valid source location when instantiating templates based on a CXXDefaultArgExpr.
Fixes PR13758. llvm-svn: 168521
Diffstat (limited to 'clang')
-rw-r--r--clang/include/clang/AST/ExprCXX.h2
-rw-r--r--clang/lib/Sema/SemaOverload.cpp2
-rw-r--r--clang/test/SemaTemplate/default-expr-arguments.cpp18
3 files changed, 21 insertions, 1 deletions
diff --git a/clang/include/clang/AST/ExprCXX.h b/clang/include/clang/AST/ExprCXX.h
index d4a0c32acdd..9f213f1004b 100644
--- a/clang/include/clang/AST/ExprCXX.h
+++ b/clang/include/clang/AST/ExprCXX.h
@@ -795,6 +795,8 @@ public:
return SourceRange();
}
+ SourceLocation getExprLoc() const LLVM_READONLY { return Loc; }
+
static bool classof(const Stmt *T) {
return T->getStmtClass() == CXXDefaultArgExprClass;
}
diff --git a/clang/lib/Sema/SemaOverload.cpp b/clang/lib/Sema/SemaOverload.cpp
index 549fa8fc9ae..0c37c599e83 100644
--- a/clang/lib/Sema/SemaOverload.cpp
+++ b/clang/lib/Sema/SemaOverload.cpp
@@ -2980,7 +2980,7 @@ IsUserDefinedConversion(Sema &S, Expr *From, QualType ToType,
S.IsDerivedFrom(From->getType(), ToType)))
ConstructorsOnly = true;
- S.RequireCompleteType(From->getLocStart(), ToType, 0);
+ S.RequireCompleteType(From->getExprLoc(), ToType, 0);
// RequireCompleteType may have returned true due to some invalid decl
// during template instantiation, but ToType may be complete enough now
// to try to recover.
diff --git a/clang/test/SemaTemplate/default-expr-arguments.cpp b/clang/test/SemaTemplate/default-expr-arguments.cpp
index 1eefa9f8956..4e76a5a04c8 100644
--- a/clang/test/SemaTemplate/default-expr-arguments.cpp
+++ b/clang/test/SemaTemplate/default-expr-arguments.cpp
@@ -303,3 +303,21 @@ namespace PR12581 {
{
}
}
+
+namespace PR13758 {
+ template <typename T> struct move_from {
+ T invalid; // expected-error {{field has incomplete type 'void'}}
+ };
+ template <class K>
+ struct unordered_map {
+ explicit unordered_map(int n = 42);
+ unordered_map(move_from<K> other);
+ };
+ template<typename T>
+ void StripedHashTable() {
+ new unordered_map<void>(); // expected-note {{in instantiation of template class 'PR13758::move_from<void>' requested here}}
+ }
+ void tt() {
+ StripedHashTable<int>(); // expected-note {{in instantiation of function template specialization 'PR13758::StripedHashTable<int>' requested here}}
+ }
+}
OpenPOWER on IntegriCloud