aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2010-01-07 00:26:25 +0000
committerDouglas Gregor <dgregor@apple.com>2010-01-07 00:26:25 +0000
commit0d535c89c5d02017153fb971e1ef080cd80cb4b8 (patch)
tree4d309618cb2054725cca40bd8e2bc3d5746ccec1
parent67dd1d4df1b28973e12e0981129b2517d2033b66 (diff)
When we typo-correct a base class initializer, point to the base class
specifier that we corrected to. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@92878 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/clang/Basic/DiagnosticSemaKinds.td3
-rw-r--r--lib/Sema/SemaDeclCXX.cpp9
-rw-r--r--test/FixIt/typo.cpp2
3 files changed, 11 insertions, 3 deletions
diff --git a/include/clang/Basic/DiagnosticSemaKinds.td b/include/clang/Basic/DiagnosticSemaKinds.td
index 9d5ef0b402..710e977261 100644
--- a/include/clang/Basic/DiagnosticSemaKinds.td
+++ b/include/clang/Basic/DiagnosticSemaKinds.td
@@ -2594,7 +2594,8 @@ def err_undef_superclass_suggest : Error<
"%2?">;
def err_undeclared_protocol_suggest : Error<
"cannot find protocol declaration for %0; did you mean %1?">;
-
+def note_base_class_specified_here : Note<
+ "base class %0 specified here">;
}
diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp
index 7ae0440b40..d3c8de326c 100644
--- a/lib/Sema/SemaDeclCXX.cpp
+++ b/lib/Sema/SemaDeclCXX.cpp
@@ -1091,7 +1091,14 @@ Sema::ActOnMemInitializer(DeclPtrTy ConstructorD,
<< MemberOrBase << false << R.getLookupName()
<< CodeModificationHint::CreateReplacement(R.getNameLoc(),
R.getLookupName().getAsString());
-
+
+ const CXXBaseSpecifier *BaseSpec = DirectBaseSpec? DirectBaseSpec
+ : VirtualBaseSpec;
+ Diag(BaseSpec->getSourceRange().getBegin(),
+ diag::note_base_class_specified_here)
+ << BaseSpec->getType()
+ << BaseSpec->getSourceRange();
+
TyD = Type;
}
}
diff --git a/test/FixIt/typo.cpp b/test/FixIt/typo.cpp
index ffeb18dde1..50c6d312b8 100644
--- a/test/FixIt/typo.cpp
+++ b/test/FixIt/typo.cpp
@@ -35,7 +35,7 @@ bool test_string(std::string s) {
}
struct Base { };
-struct Derived : public Base {
+struct Derived : public Base { // expected-note{{base class 'struct Base' specified here}}
int member; // expected-note 3{{'member' declared here}}
Derived() : base(), // expected-error{{initializer 'base' does not name a non-static data member or base class; did you mean the base class 'Base'?}}