Tweak duplicate category diagnostic to work like the duplicate protocol diagnostic.
Also, point out where the previous decl was. This unxfails two tests. llvm-svn: 59918
This commit is contained in:
parent
e3d20d9545
commit
88dcd2a1ab
|
@ -22,6 +22,14 @@
|
|||
// by default.
|
||||
// ERROR - Error, compilation will stop after parsing completes.
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Common Helpers
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
DIAG(note_previous_definition, NOTE,
|
||||
"previous definition is here")
|
||||
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Lexer Diagnostics
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
@ -126,8 +134,6 @@ DIAG(ext_pp_bad_vaargs_use, EXTENSION,
|
|||
"__VA_ARGS__ can only appear in the expansion of a C99 variadic macro")
|
||||
DIAG(ext_pp_macro_redef, EXTENSION,
|
||||
"%0 macro redefined")
|
||||
DIAG(note_previous_definition, NOTE,
|
||||
"previous definition is here")
|
||||
DIAG(ext_variadic_macro, EXTENSION,
|
||||
"variadic macros were introduced in C99")
|
||||
DIAG(ext_named_variadic_macro, EXTENSION,
|
||||
|
@ -455,7 +461,7 @@ DIAG(err_duplicate_protocol_def, ERROR,
|
|||
DIAG(err_undef_interface, ERROR,
|
||||
"cannot find interface declaration for %0")
|
||||
DIAG(warn_dup_category_def, WARNING,
|
||||
"duplicate interface declaration for category %0 (%1)")
|
||||
"duplicate definition of category %1 on interface %0")
|
||||
DIAG(warn_undef_interface, WARNING,
|
||||
"cannot find interface declaration for %0")
|
||||
DIAG(err_dup_implementation_class, ERROR,
|
||||
|
|
|
@ -406,6 +406,7 @@ ActOnStartCategoryInterface(SourceLocation AtInterfaceLoc,
|
|||
if (CategoryName && CDeclChain->getIdentifier() == CategoryName) {
|
||||
Diag(CategoryLoc, diag::warn_dup_category_def)
|
||||
<< ClassName << CategoryName;
|
||||
Diag(CDeclChain->getLocation(), diag::note_previous_definition);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,29 +1,28 @@
|
|||
// RUN: clang -fsyntax-only -verify %s
|
||||
// XFAIL
|
||||
|
||||
@interface MyClass1 @end
|
||||
|
||||
@protocol p1,p2,p3;
|
||||
|
||||
@interface MyClass1 (Category1) <p1> // expected-warning {{cannot find protocol definition for 'p1'}}
|
||||
@interface MyClass1 (Category1) <p1> // expected-warning {{cannot find protocol definition for 'p1'}} expected-note {{previous definition is here}}
|
||||
@end
|
||||
|
||||
@interface MyClass1 (Category1) // expected-warning {{duplicate interface declaration for category 'MyClass1(Category1)'}}
|
||||
@interface MyClass1 (Category1) // expected-warning {{duplicate definition of category 'Category1' on interface 'MyClass1'}}
|
||||
@end
|
||||
|
||||
@interface MyClass1 (Category3)
|
||||
@end
|
||||
|
||||
@interface MyClass1 (Category4) @end
|
||||
@interface MyClass1 (Category4) @end // expected-note {{previous definition is here}}
|
||||
@interface MyClass1 (Category5) @end
|
||||
@interface MyClass1 (Category6) @end
|
||||
@interface MyClass1 (Category7) @end
|
||||
@interface MyClass1 (Category8) @end
|
||||
@interface MyClass1 (Category7) @end // expected-note {{previous definition is here}}
|
||||
@interface MyClass1 (Category8) @end // expected-note {{previous definition is here}}
|
||||
|
||||
|
||||
@interface MyClass1 (Category4) @end // expected-warning {{duplicate interface declaration for category 'MyClass1(Category4)'}}
|
||||
@interface MyClass1 (Category7) @end // expected-warning {{duplicate interface declaration for category 'MyClass1(Category7)'}}
|
||||
@interface MyClass1 (Category8) @end // expected-warning {{duplicate interface declaration for category 'MyClass1(Category8)'}}
|
||||
@interface MyClass1 (Category4) @end // expected-warning {{duplicate definition of category 'Category4' on interface 'MyClass1'}}
|
||||
@interface MyClass1 (Category7) @end // expected-warning {{duplicate definition of category 'Category7' on interface 'MyClass1'}}
|
||||
@interface MyClass1 (Category8) @end // expected-warning {{duplicate definition of category 'Category8' on interface 'MyClass1'}}
|
||||
|
||||
|
||||
@protocol p3 @end
|
||||
|
@ -45,10 +44,10 @@
|
|||
@interface XCRemoteComputerManager()
|
||||
@end
|
||||
|
||||
@interface XCRemoteComputerManager(x)
|
||||
@interface XCRemoteComputerManager(x) // expected-note {{previous definition is here}}
|
||||
@end
|
||||
|
||||
@interface XCRemoteComputerManager(x) // expected-warning {{duplicate interface declaration for category 'XCRemoteComputerManager(x)'}}
|
||||
@interface XCRemoteComputerManager(x) // expected-warning {{duplicate definition of category 'x' on interface 'XCRemoteComputerManager'}}
|
||||
@end
|
||||
|
||||
@implementation XCRemoteComputerManager
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
// RUN: clang -fsyntax-only -verify %s
|
||||
// XFAIL
|
||||
|
||||
@interface Foo // expected-error {{previous definition is here}}
|
||||
@end
|
||||
|
@ -36,5 +35,5 @@ void Gorf() // expected-error {{redefinition of 'Gorf' as different kind of symb
|
|||
@protocol PP<P> @end
|
||||
@protocol PP<Q> @end // expected-error {{duplicate protocol declaration of 'PP'}}
|
||||
|
||||
@interface A(Cat)<P> @end
|
||||
@interface A(Cat)<Q> @end // expected-warning {{duplicate interface declaration for category 'A(Cat)'}}
|
||||
@interface A(Cat)<P> @end // expected-note {{previous definition is here}}
|
||||
@interface A(Cat)<Q> @end // expected-warning {{duplicate definition of category 'Cat' on interface 'A'}}
|
||||
|
|
Loading…
Reference in New Issue