nickdesaulniers created this revision. nickdesaulniers added a reviewer: compnerd. Herald added a project: clang. Herald added a subscriber: cfe-commits.
commit 81a650ee87eb ("Driver,CodeGen: introduce support for Swift CFString layout") r345222 added support for implicit typedefs for __NSConstantString, used for the runtime ABI for CoreFoundation, which can be set via -fcf-runtime-abi=. This implicit typdef pollutes the global namespace for code that's not targeting CoreFoundation platforms. As such, require -fcf-runtime-abi= to be used, and disallow the creation of the typedef for C code that does not specify. This is most visable dumping ASTs when debugging. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D79525 Files: clang/lib/Sema/Sema.cpp clang/test/AST/ast-dump-file-line-json.c clang/test/AST/ast-dump-record-definition-data-json.cpp clang/test/AST/ast-dump-records-json.cpp clang/test/AST/ast-dump-template-decls-json.cpp clang/test/CodeGen/cf-runtime-abi.c
Index: clang/test/CodeGen/cf-runtime-abi.c =================================================================== --- clang/test/CodeGen/cf-runtime-abi.c +++ clang/test/CodeGen/cf-runtime-abi.c @@ -1,7 +1,3 @@ -// RUN: %clang_cc1 -triple x86_64-apple-macosx -S -emit-llvm -o - %s | FileCheck %s -check-prefix CHECK-OBJC -// RUN: %clang_cc1 -triple x86_64-unknown-windows-msvc -S -emit-llvm -o - %s | FileCheck %s -check-prefix CHECK-OBJC-LLP64 -// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -S -emit-llvm -o - %s | FileCheck %s -check-prefix CHECK-OBJC - // RUN: %clang_cc1 -triple x86_64-apple-macosx -fcf-runtime-abi=objc -S -emit-llvm -o - %s | FileCheck %s -check-prefix CHECK-OBJC // RUN: %clang_cc1 -triple x86_64-unknown-windows-msvc -fcf-runtime-abi=objc -S -emit-llvm -o - %s | FileCheck %s -check-prefix CHECK-OBJC-LLP64 // RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fcf-runtime-abi=objc -S -emit-llvm -o - %s | FileCheck %s -check-prefix CHECK-OBJC Index: clang/test/AST/ast-dump-template-decls-json.cpp =================================================================== --- clang/test/AST/ast-dump-template-decls-json.cpp +++ clang/test/AST/ast-dump-template-decls-json.cpp @@ -120,34 +120,6 @@ // CHECK-NEXT: "end": {} // CHECK-NEXT: }, // CHECK-NEXT: "isImplicit": true, -// CHECK-NEXT: "name": "__NSConstantString", -// CHECK-NEXT: "type": { -// CHECK-NEXT: "qualType": "__NSConstantString_tag" -// CHECK-NEXT: }, -// CHECK-NEXT: "inner": [ -// CHECK-NEXT: { -// CHECK-NEXT: "id": "0x{{.*}}", -// CHECK-NEXT: "kind": "RecordType", -// CHECK-NEXT: "type": { -// CHECK-NEXT: "qualType": "__NSConstantString_tag" -// CHECK-NEXT: }, -// CHECK-NEXT: "decl": { -// CHECK-NEXT: "id": "0x{{.*}}", -// CHECK-NEXT: "kind": "CXXRecordDecl", -// CHECK-NEXT: "name": "__NSConstantString_tag" -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: ] -// CHECK-NEXT: }, -// CHECK-NEXT: { -// CHECK-NEXT: "id": "0x{{.*}}", -// CHECK-NEXT: "kind": "TypedefDecl", -// CHECK-NEXT: "loc": {}, -// CHECK-NEXT: "range": { -// CHECK-NEXT: "begin": {}, -// CHECK-NEXT: "end": {} -// CHECK-NEXT: }, -// CHECK-NEXT: "isImplicit": true, // CHECK-NEXT: "name": "__builtin_ms_va_list", // CHECK-NEXT: "type": { // CHECK-NEXT: "qualType": "char *" Index: clang/test/AST/ast-dump-records-json.cpp =================================================================== --- clang/test/AST/ast-dump-records-json.cpp +++ clang/test/AST/ast-dump-records-json.cpp @@ -88,11 +88,6 @@ // using --filters=CXXRecordDecl -// CHECK: "kind": "CXXRecordDecl", -// CHECK-NEXT: "name": "__NSConstantString_tag" -// CHECK-NEXT: } - - // CHECK: "kind": "CXXRecordDecl", // CHECK-NEXT: "name": "__va_list_tag" // CHECK-NEXT: } Index: clang/test/AST/ast-dump-record-definition-data-json.cpp =================================================================== --- clang/test/AST/ast-dump-record-definition-data-json.cpp +++ clang/test/AST/ast-dump-record-definition-data-json.cpp @@ -128,11 +128,6 @@ // using --filters=CXXRecordDecl -// CHECK: "kind": "CXXRecordDecl", -// CHECK-NEXT: "name": "__NSConstantString_tag" -// CHECK-NEXT: } - - // CHECK: "kind": "CXXRecordDecl", // CHECK-NEXT: "name": "__va_list_tag" // CHECK-NEXT: } Index: clang/test/AST/ast-dump-file-line-json.c =================================================================== --- clang/test/AST/ast-dump-file-line-json.c +++ clang/test/AST/ast-dump-file-line-json.c @@ -75,34 +75,6 @@ // CHECK-NEXT: "end": {} // CHECK-NEXT: }, // CHECK-NEXT: "isImplicit": true, -// CHECK-NEXT: "name": "__NSConstantString", -// CHECK-NEXT: "type": { -// CHECK-NEXT: "qualType": "struct __NSConstantString_tag" -// CHECK-NEXT: }, -// CHECK-NEXT: "inner": [ -// CHECK-NEXT: { -// CHECK-NEXT: "id": "0x{{.*}}", -// CHECK-NEXT: "kind": "RecordType", -// CHECK-NEXT: "type": { -// CHECK-NEXT: "qualType": "struct __NSConstantString_tag" -// CHECK-NEXT: }, -// CHECK-NEXT: "decl": { -// CHECK-NEXT: "id": "0x{{.*}}", -// CHECK-NEXT: "kind": "RecordDecl", -// CHECK-NEXT: "name": "__NSConstantString_tag" -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: ] -// CHECK-NEXT: }, -// CHECK-NEXT: { -// CHECK-NEXT: "id": "0x{{.*}}", -// CHECK-NEXT: "kind": "TypedefDecl", -// CHECK-NEXT: "loc": {}, -// CHECK-NEXT: "range": { -// CHECK-NEXT: "begin": {}, -// CHECK-NEXT: "end": {} -// CHECK-NEXT: }, -// CHECK-NEXT: "isImplicit": true, // CHECK-NEXT: "name": "__builtin_ms_va_list", // CHECK-NEXT: "type": { // CHECK-NEXT: "qualType": "char *" Index: clang/lib/Sema/Sema.cpp =================================================================== --- clang/lib/Sema/Sema.cpp +++ clang/lib/Sema/Sema.cpp @@ -274,9 +274,12 @@ } // Create the internal type for the *StringMakeConstantString builtins. - DeclarationName ConstantString = &Context.Idents.get("__NSConstantString"); - if (IdResolver.begin(ConstantString) == IdResolver.end()) - PushOnScopeChains(Context.getCFConstantStringDecl(), TUScope); + if (getLangOpts().ObjC || + getLangOpts().CFRuntime != LangOptions::CoreFoundationABI::Unspecified) { + DeclarationName ConstantString = &Context.Idents.get("__NSConstantString"); + if (IdResolver.begin(ConstantString) == IdResolver.end()) + PushOnScopeChains(Context.getCFConstantStringDecl(), TUScope); + } // Initialize Microsoft "predefined C++ types". if (getLangOpts().MSVCCompat) {
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits