Author: hans Date: Fri May 23 15:16:41 2014 New Revision: 209546 URL: http://llvm.org/viewvc/llvm-project?rev=209546&view=rev Log: Don't suppress warning about dllimport on typedefs etc. in MicrosoftExt mode
It's true the MSVC doesn't warn about dllimport when applied to e.g. a typedef, but that applies to dllexport too. I'd like us to be consistent, and I think the right thing to do is to warn. The original test that came with implementing the old behaviour doesn't provide a good motivation, and it said it was checking that we're not repoting an *error*, which is still true since this is just a warning. There are plenty of tests e.g. in Sema/dllimport.c to check that we do warn about dllimport on non functions or variables. Differential Revision: http://reviews.llvm.org/D3832 Removed: cfe/trunk/test/Rewriter/dllimport-typedef.c Modified: cfe/trunk/include/clang/Basic/Attr.td cfe/trunk/lib/Sema/SemaDeclAttr.cpp Modified: cfe/trunk/include/clang/Basic/Attr.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/Attr.td?rev=209546&r1=209545&r2=209546&view=diff ============================================================================== --- cfe/trunk/include/clang/Basic/Attr.td (original) +++ cfe/trunk/include/clang/Basic/Attr.td Fri May 23 15:16:41 2014 @@ -1665,8 +1665,7 @@ def DLLExport : InheritableAttr, TargetS def DLLImport : InheritableAttr, TargetSpecificAttr<TargetWindows> { let Spellings = [Declspec<"dllimport">, GCC<"dllimport">]; - // Technically, the subjects for DllImport are Function and Var, but there is - // custom semantic handling required when MicrosoftExt is true. + let Subjects = SubjectList<[Function, Var]>; let Documentation = [Undocumented]; } Modified: cfe/trunk/lib/Sema/SemaDeclAttr.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclAttr.cpp?rev=209546&r1=209545&r2=209546&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaDeclAttr.cpp (original) +++ cfe/trunk/lib/Sema/SemaDeclAttr.cpp Fri May 23 15:16:41 2014 @@ -3836,18 +3836,6 @@ DLLImportAttr *Sema::mergeDLLImportAttr( } static void handleDLLImportAttr(Sema &S, Decl *D, const AttributeList &Attr) { - // Attribute can be applied only to functions or variables. - FunctionDecl *FD = dyn_cast<FunctionDecl>(D); - if (!FD && !isa<VarDecl>(D)) { - // Apparently Visual C++ thinks it is okay to not emit a warning - // in this case, so only emit a warning when -fms-extensions is not - // specified. - if (!S.getLangOpts().MicrosoftExt) - S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type) - << Attr.getName() << ExpectedVariableOrFunction; - return; - } - unsigned Index = Attr.getAttributeSpellingListIndex(); DLLImportAttr *NewAttr = S.mergeDLLImportAttr(D, Attr.getRange(), Index); if (NewAttr) Removed: cfe/trunk/test/Rewriter/dllimport-typedef.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Rewriter/dllimport-typedef.c?rev=209545&view=auto ============================================================================== --- cfe/trunk/test/Rewriter/dllimport-typedef.c (original) +++ cfe/trunk/test/Rewriter/dllimport-typedef.c (removed) @@ -1,17 +0,0 @@ -// RUN: not %clang_cc1 -triple i686-pc-win32 -fms-extensions -fsyntax-only %s 2>&1 | FileCheck -check-prefix=CHECK-NEG %s -// RUN: not %clang_cc1 -triple i686-pc-win32 -fsyntax-only %s 2>&1 | FileCheck -check-prefix=CHECK-POS %s - -// Do not report an error with including dllimport in the typedef when -fms-extensions is specified. -// Addresses <rdar://problem/7653870>. -typedef __declspec(dllimport) int CB(void); - -// This function is added just to trigger a diagnostic. This way we can test how many -// diagnostics we expect. -void bar() { return 1; } - -// CHECK-NEG: error: void function 'bar' should not return a value -// CHECK-NEG: {{^}}1 error generated -// CHECK-POS: warning: 'dllimport' attribute only applies to variables and functions -// CHECK-POS: error: void function 'bar' should not return a value -// CHECK-POS: 1 warning and 1 error generated - _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
