From 3175e5fb93c1aeaaeafa01c34731c45c348aa804 Mon Sep 17 00:00:00 2001 From: Hans Wennborg Date: Thu, 22 May 2014 20:45:53 +0000 Subject: [PATCH] Don't warn about undefined inline functions if they're dllexport/import git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@209471 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/Sema.cpp | 7 +++++++ test/SemaCXX/undefined-inline.cpp | 8 +++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/lib/Sema/Sema.cpp b/lib/Sema/Sema.cpp index b0d1023b01..6a7ba5a610 100644 --- a/lib/Sema/Sema.cpp +++ b/lib/Sema/Sema.cpp @@ -478,6 +478,13 @@ static void checkUndefinedButUsed(Sema &S) { I = Undefined.begin(), E = Undefined.end(); I != E; ++I) { NamedDecl *ND = I->first; + if (ND->hasAttr() || ND->hasAttr()) { + // An exported function will always be emitted when defined, so even if + // the function is inline, it doesn't have to be emitted in this TU. An + // imported function implies that it has been exported somewhere else. + continue; + } + if (!ND->isExternallyVisible()) { S.Diag(ND->getLocation(), diag::warn_undefined_internal) << isa(ND) << ND; diff --git a/test/SemaCXX/undefined-inline.cpp b/test/SemaCXX/undefined-inline.cpp index ad719ae03a..18973ef8b7 100644 --- a/test/SemaCXX/undefined-inline.cpp +++ b/test/SemaCXX/undefined-inline.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -fsyntax-only -verify %s +// RUN: %clang_cc1 -fsyntax-only -triple i686-pc-win32 -verify %s // PR14993 namespace test1 { @@ -55,3 +55,9 @@ namespace test10 { void test() { foo(); } inline void foo() __attribute__((gnu_inline)); } + +namespace test11 { + inline void foo() __attribute__((dllexport)); + inline void bar() __attribute__((dllimport)); + void test() { foo(); bar(); } +} -- 2.40.0