Revert r180263. It's causing failures.

llvm-svn: 180583
This commit is contained in:
Bill Wendling 2013-04-25 23:15:02 +00:00
parent b6219a9f0e
commit afddaa4719
2 changed files with 6 additions and 18 deletions

View File

@ -476,13 +476,6 @@ template <typename T> static bool isInExternCContext(T *D) {
return First->getDeclContext()->isExternCContext(); return First->getDeclContext()->isExternCContext();
} }
static bool isSingleLineExternC(const Decl &D) {
if (const LinkageSpecDecl *SD = dyn_cast<LinkageSpecDecl>(D.getDeclContext()))
if (SD->getLanguage() == LinkageSpecDecl::lang_c && !SD->hasBraces())
return true;
return false;
}
static LinkageInfo getLVForNamespaceScopeDecl(const NamedDecl *D, static LinkageInfo getLVForNamespaceScopeDecl(const NamedDecl *D,
LVComputationKind computation) { LVComputationKind computation) {
assert(D->getDeclContext()->getRedeclContext()->isFileContext() && assert(D->getDeclContext()->getRedeclContext()->isFileContext() &&
@ -511,8 +504,7 @@ static LinkageInfo getLVForNamespaceScopeDecl(const NamedDecl *D,
return PrevVar->getLinkageAndVisibility(); return PrevVar->getLinkageAndVisibility();
if (Var->getStorageClass() != SC_Extern && if (Var->getStorageClass() != SC_Extern &&
Var->getStorageClass() != SC_PrivateExtern && Var->getStorageClass() != SC_PrivateExtern)
!isSingleLineExternC(*Var))
return LinkageInfo::internal(); return LinkageInfo::internal();
} }
@ -1588,8 +1580,11 @@ VarDecl::DefinitionKind VarDecl::isThisDeclarationADefinition(
// A declaration directly contained in a linkage-specification is treated // A declaration directly contained in a linkage-specification is treated
// as if it contains the extern specifier for the purpose of determining // as if it contains the extern specifier for the purpose of determining
// the linkage of the declared name and whether it is a definition. // the linkage of the declared name and whether it is a definition.
if (isSingleLineExternC(*this)) const DeclContext *DC = getDeclContext();
return DeclarationOnly; if (const LinkageSpecDecl *SD = dyn_cast<LinkageSpecDecl>(DC)) {
if (SD->getLanguage() == LinkageSpecDecl::lang_c && !SD->hasBraces())
return DeclarationOnly;
}
// C99 6.9.2p2: // C99 6.9.2p2:
// A declaration of an object that has file scope without an initializer, // A declaration of an object that has file scope without an initializer,

View File

@ -323,10 +323,3 @@ namespace test13 {
} }
} }
namespace test14 {
extern "C" const int foo;
int f() {
return foo;
}
}