diff options
| author | Nico Rieck <nico.rieck@gmail.com> | 2014-02-26 21:27:13 +0000 |
|---|---|---|
| committer | Nico Rieck <nico.rieck@gmail.com> | 2014-02-26 21:27:13 +0000 |
| commit | 8e9791f62c453e80c50c7ad342b10f969eeffd0d (patch) | |
| tree | 38c9e5e6a6dbc68c246e3a6985f37c86ab3fa364 /clang/test/SemaCXX | |
| parent | b3d4821ae5d186759bb9c084994f2532cb3d0dbd (diff) | |
| download | bcm5719-llvm-8e9791f62c453e80c50c7ad342b10f969eeffd0d.tar.gz bcm5719-llvm-8e9791f62c453e80c50c7ad342b10f969eeffd0d.zip | |
Sema: Definition of dllimport globals is not allowed
Upgrades the warning to an error and clarifies the message by treating the
definition as error instead of the attribute.
llvm-svn: 202300
Diffstat (limited to 'clang/test/SemaCXX')
| -rw-r--r-- | clang/test/SemaCXX/dllexport.cpp | 6 | ||||
| -rw-r--r-- | clang/test/SemaCXX/dllimport.cpp | 14 |
2 files changed, 12 insertions, 8 deletions
diff --git a/clang/test/SemaCXX/dllexport.cpp b/clang/test/SemaCXX/dllexport.cpp index 114ebd02bbf..64763834956 100644 --- a/clang/test/SemaCXX/dllexport.cpp +++ b/clang/test/SemaCXX/dllexport.cpp @@ -161,8 +161,8 @@ __declspec(dllexport) __declspec(dllimport) extern int PrecedenceExternGlobal2B; __attribute__((dllimport, dllexport)) int PrecedenceGlobal1A; // expected-warning{{'dllimport' attribute ignored}} __declspec(dllimport) __declspec(dllexport) int PrecedenceGlobal1B; // expected-warning{{'dllimport' attribute ignored}} -__attribute__((dllexport, dllimport)) int PrecedenceGlobal2A; // expected-warning{{'dllimport' attribute cannot be specified on a definition}} -__declspec(dllexport) __declspec(dllimport) int PrecedenceGlobal2B; // expected-warning{{'dllimport' attribute cannot be specified on a definition}} +__attribute__((dllexport, dllimport)) int PrecedenceGlobal2A; // expected-warning{{'dllimport' attribute ignored}} +__declspec(dllexport) __declspec(dllimport) int PrecedenceGlobal2B; // expected-warning{{'dllimport' attribute ignored}} __declspec(dllexport) extern int PrecedenceExternGlobalRedecl1; __declspec(dllimport) extern int PrecedenceExternGlobalRedecl1; // expected-warning{{'dllimport' attribute ignored}} @@ -171,7 +171,7 @@ __declspec(dllimport) extern int PrecedenceExternGlobalRedecl2; // expected-warn __declspec(dllexport) extern int PrecedenceExternGlobalRedecl2; __declspec(dllexport) extern int PrecedenceGlobalRedecl1; -__declspec(dllimport) int PrecedenceGlobalRedecl1; // expected-warning{{'dllimport' attribute cannot be specified on a definition}} +__declspec(dllimport) int PrecedenceGlobalRedecl1; // expected-warning{{'dllimport' attribute ignored}} __declspec(dllimport) extern int PrecedenceGlobalRedecl2; // expected-warning{{'dllimport' attribute ignored}} __declspec(dllexport) int PrecedenceGlobalRedecl2; diff --git a/clang/test/SemaCXX/dllimport.cpp b/clang/test/SemaCXX/dllimport.cpp index d04a4b990aa..4a3ee202ad9 100644 --- a/clang/test/SemaCXX/dllimport.cpp +++ b/clang/test/SemaCXX/dllimport.cpp @@ -32,16 +32,17 @@ enum __declspec(dllimport) Enum {}; // expected-warning{{'dllimport' attribute o // Import declaration. __declspec(dllimport) extern int ExternGlobalDecl; -// dllimport implies a declaration. FIXME: This should not warn. -__declspec(dllimport) int GlobalDecl; // expected-warning{{'dllimport' attribute cannot be specified on a definition}} +// dllimport implies a declaration. +__declspec(dllimport) int GlobalDecl; // Not allowed on definitions. -__declspec(dllimport) int GlobalInit1 = 1; // expected-warning{{'dllimport' attribute cannot be specified on a definition}} -int __declspec(dllimport) GlobalInit2 = 1; // expected-warning{{'dllimport' attribute cannot be specified on a definition}} +__declspec(dllimport) extern int ExternGlobalInit = 1; // expected-error{{definition of dllimport data}} +__declspec(dllimport) int GlobalInit1 = 1; // expected-error{{definition of dllimport data}} +int __declspec(dllimport) GlobalInit2 = 1; // expected-error{{definition of dllimport data}} // Declare, then reject definition. __declspec(dllimport) extern int ExternGlobalDeclInit; -int ExternGlobalDeclInit = 1; // expected-warning{{'dllimport' attribute cannot be specified on a definition}} +int ExternGlobalDeclInit = 1; // expected-error{{definition of dllimport data}} // Redeclarations __declspec(dllimport) extern int GlobalRedecl1; @@ -49,7 +50,10 @@ __declspec(dllimport) extern int GlobalRedecl1; // Import in local scope. void functionScope() { + __declspec(dllimport) int LocalVarDecl; + __declspec(dllimport) int LocalVarDef = 1; // expected-error{{definition of dllimport data}} __declspec(dllimport) extern int ExternLocalVarDecl; + __declspec(dllimport) extern int ExternLocalVarDef = 1; // expected-error{{definition of dllimport data}} } |

