mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-20 12:05:48 -04:00

Fixes <rdar://problem/15584219> and <rdar://problem/12241361>. This change looks large, but all it does is reuse and consolidate the delayed diagnostic logic for deprecation warnings with unavailability warnings. By doing so, it showed various inconsistencies between the diagnostics, which were close, but not consistent. It also revealed some missing "note:"'s in the deprecated diagnostics that were showing up in the unavailable diagnostics, etc. This change also changes the wording of the core deprecation diagnostics. Instead of saying "function has been explicitly marked deprecated" we now saw "'X' has been been explicitly marked deprecated". It turns out providing a bit more context is useful, and often we got the actual term wrong or it was not very precise (e.g., "function" instead of "destructor"). By just saying the name of the thing that is deprecated/deleted/unavailable we define this issue away. This diagnostic can likely be further wordsmithed to be shorter. llvm-svn: 197627
32 lines
1.3 KiB
C
32 lines
1.3 KiB
C
// RUN: %clang_cc1 %s -verify -fsyntax-only
|
|
// rdar: // 6734520
|
|
|
|
typedef int INT1 __attribute__((deprecated("Please avoid INT1"))); // expected-note 3 {{'INT1' has been explicitly marked deprecated here}}
|
|
|
|
typedef INT1 INT2 __attribute__ ((__deprecated__("Please avoid INT2")));
|
|
|
|
typedef INT1 INT1a; // expected-warning {{'INT1' is deprecated: Please avoid INT1}}
|
|
|
|
typedef INT1 INT1b __attribute__ ((deprecated("Please avoid INT1b")));
|
|
|
|
INT1 should_be_unavailable; // expected-warning {{'INT1' is deprecated: Please avoid INT1}}
|
|
INT1a should_not_be_deprecated;
|
|
|
|
INT1 f1(void) __attribute__ ((deprecated("Please avoid f1"))); // expected-note {{'f1' has been explicitly marked deprecated here}}
|
|
INT1 f2(void); // expected-warning {{'INT1' is deprecated: Please avoid INT1}}
|
|
|
|
typedef enum {red, green, blue} Color __attribute__((deprecated("Please avoid Color"))); // expected-note {{'Color' has been explicitly marked deprecated here}}
|
|
|
|
|
|
Color c1; // expected-warning {{'Color' is deprecated: Please avoid Color}}
|
|
|
|
int g1;
|
|
int g2 __attribute__ ((deprecated("Please avoid g2"))); // expected-note {{'g2' has been explicitly marked deprecated here}}
|
|
|
|
int func1()
|
|
{
|
|
int (*pf)() = f1; // expected-warning {{'f1' is deprecated: Please avoid f1}}
|
|
int i = f2();
|
|
return g1 + g2; // expected-warning {{'g2' is deprecated: Please avoid g2}}
|
|
}
|