]> granicus.if.org Git - clang/commit
Reinstate r185229, reverted in r185256, with a tweak: further ignore the
authorRichard Smith <richard-llvm@metafoo.co.uk>
Sun, 30 Jun 2013 09:48:50 +0000 (09:48 +0000)
committerRichard Smith <richard-llvm@metafoo.co.uk>
Sun, 30 Jun 2013 09:48:50 +0000 (09:48 +0000)
commitaa4bc18240c03b5ed7952aa5e013c081f8733ed3
treeac4506ba6246ada70e8fc4fb889bd6ddd7329352
parentad5f8336f96911805bb625cc4fb1a4487745508a
Reinstate r185229, reverted in r185256, with a tweak: further ignore the
standard's rule that an extern "C" declaration conflicts with any entity in the
global scope with the same name. Now we only care if the global scope entity is
a variable declaration (and so might have the same mangled name as the extern
"C" declaration). This has been reported as a standard defect.

Original commit message:

PR7927, PR16247: Reimplement handling of matching extern "C" declarations
across scopes.

When we declare an extern "C" name that is not a redeclaration of an entity in
the same scope, check whether it redeclares some extern "C" entity from another
scope, and if not, check whether it conflicts with a (non-extern-"C") entity in
the translation unit.

When we declare a name in the translation unit that is not a redeclaration,
check whether it conflicts with any extern "C" entities (possibly from other
scopes).

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@185281 91177308-0d34-0410-b5e6-96231b3b80d8
include/clang/Basic/DiagnosticSemaKinds.td
lib/Sema/SemaDecl.cpp
lib/Sema/SemaOverload.cpp
test/CXX/class.access/class.friend/p1.cpp
test/Sema/overloadable.c
test/SemaCXX/extern-c.cpp
test/SemaCXX/friend.cpp
test/SemaCXX/linkage-spec.cpp
test/SemaCXX/linkage2.cpp