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
  • [PATCH] D79525: [Sema] re... Nick Desaulniers via Phabricator via cfe-commits

Reply via email to