Suppress incorrect warning when a keyword is used in template classes
Closes https://github.com/swig/swig/issues/845
This commit is contained in:
parent
e517128e08
commit
e6b270b6dc
5 changed files with 116 additions and 3 deletions
80
Examples/test-suite/errors/cpp_namewarn.i
Normal file
80
Examples/test-suite/errors/cpp_namewarn.i
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
%module xxx
|
||||
|
||||
%namewarn("314:'key1' is a keyword, renaming to '_key1'", rename="_%s") "key1";
|
||||
%namewarn("314:'key2' is a keyword, renaming to '_key2'", rename="_%s") "key2";
|
||||
%namewarn("314:'key3' is a keyword, renaming to '_key3'", rename="_%s") "key3";
|
||||
%namewarn("314:'key4' is a keyword, renaming to '_key4'", rename="_%s") "key4";
|
||||
%namewarn("314:'key5' is a keyword, renaming to '_key5'", rename="_%s") "key5";
|
||||
|
||||
// Non-templated
|
||||
%ignore KlassA::key1;
|
||||
%rename(key2renamed) KlassA::key2;
|
||||
%rename(key3renamed) KlassA::key3;
|
||||
%rename(key4renamed) KlassA::key4;
|
||||
|
||||
// Templated
|
||||
%ignore KlassB::key1;
|
||||
%rename(key2renamed) KlassB::key2;
|
||||
%rename(key3renamed) KlassB<double>::key3;
|
||||
|
||||
// Template specialized
|
||||
%ignore KlassC::key1;
|
||||
%rename(key2renamed) KlassC::key2;
|
||||
%rename(key3renamed) KlassC<double>::key3;
|
||||
|
||||
// No warnings for these...
|
||||
%inline %{
|
||||
struct KlassA {
|
||||
void key1() {}
|
||||
void key2() {}
|
||||
void key3() {}
|
||||
template<typename X> void key4(X x) {}
|
||||
};
|
||||
|
||||
template<class T> struct KlassB {
|
||||
void key1() {}
|
||||
void key2() {}
|
||||
void key3() {}
|
||||
};
|
||||
|
||||
template<class T> struct KlassC {};
|
||||
template<> struct KlassC<double> {
|
||||
void key1() {}
|
||||
void key2() {}
|
||||
void key3() {}
|
||||
};
|
||||
|
||||
template<typename T> void key5(T t) {}
|
||||
|
||||
%}
|
||||
|
||||
%template(KlassBDouble) KlassB<double>;
|
||||
%template(KlassCInt) KlassC<double>;
|
||||
%template(key5renamed) key5<double>;
|
||||
|
||||
// These should create a single warning for each keyword...
|
||||
%inline %{
|
||||
struct ClassA {
|
||||
void key1() {}
|
||||
void key2() {}
|
||||
void key3() {}
|
||||
template<typename X> void key4(X x) {}
|
||||
};
|
||||
|
||||
template<class T> struct ClassB {
|
||||
void key1() {}
|
||||
void key2() {}
|
||||
void key3() {}
|
||||
};
|
||||
|
||||
template<class T> struct ClassC {};
|
||||
template<> struct ClassC<double> {
|
||||
void key1() {}
|
||||
void key2() {}
|
||||
void key3() {}
|
||||
};
|
||||
%}
|
||||
|
||||
%template(ClassBDouble) ClassB<double>;
|
||||
%template(ClassCInt) ClassC<double>;
|
||||
%template(key5) key5<int>;
|
||||
10
Examples/test-suite/errors/cpp_namewarn.stderr
Normal file
10
Examples/test-suite/errors/cpp_namewarn.stderr
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
cpp_namewarn.i:58: Warning 314: 'key1' is a keyword, renaming to '_key1'
|
||||
cpp_namewarn.i:59: Warning 314: 'key2' is a keyword, renaming to '_key2'
|
||||
cpp_namewarn.i:60: Warning 314: 'key3' is a keyword, renaming to '_key3'
|
||||
cpp_namewarn.i:65: Warning 314: 'key1' is a keyword, renaming to '_key1'
|
||||
cpp_namewarn.i:66: Warning 314: 'key2' is a keyword, renaming to '_key2'
|
||||
cpp_namewarn.i:67: Warning 314: 'key3' is a keyword, renaming to '_key3'
|
||||
cpp_namewarn.i:72: Warning 314: 'key1' is a keyword, renaming to '_key1'
|
||||
cpp_namewarn.i:73: Warning 314: 'key2' is a keyword, renaming to '_key2'
|
||||
cpp_namewarn.i:74: Warning 314: 'key3' is a keyword, renaming to '_key3'
|
||||
cpp_namewarn.i:80: Warning 314: 'key5' is a keyword, renaming to '_key5'
|
||||
Loading…
Add table
Add a link
Reference in a new issue