[PATCH] D90549: [Driver] Switch CHECK-DEBIAN-SPARC tests to use debian_multiarch_tree

2020-11-01 Thread John Paul Adrian Glaubitz via Phabricator via cfe-commits
glaubitz created this revision.
glaubitz added reviewers: chandlerc, rengolin.
Herald added subscribers: cfe-commits, steven.zhang, pengfei, jrtc27, 
fedor.sergeev, jyknight.
Herald added a project: clang.
glaubitz requested review of this revision.

Both sparc and sparc64 are using the MultiArch mechanism on modern Debian
systems the same way as x86_64, powerpc64el and others. Thus, switch the
CHECK-DEBIAN-SPARC and CHECK-DEBIAN-SPARC64 tests to use the files from
the debian_multiarch_tree directory for the header and linker path tests.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D90549

Files:
  clang/test/Driver/Inputs/debian_8_sparc64_tree/lib/sparc64-linux-gnu/.keep
  clang/test/Driver/Inputs/debian_8_sparc64_tree/lib64/.keep
  clang/test/Driver/Inputs/debian_8_sparc64_tree/usr/include/c++/4.9/.keep
  
clang/test/Driver/Inputs/debian_8_sparc64_tree/usr/include/sparc64-linux-gnu/c++/4.9/.keep
  
clang/test/Driver/Inputs/debian_8_sparc64_tree/usr/lib/gcc/sparc64-linux-gnu/4.9/crtbegin.o
  
clang/test/Driver/Inputs/debian_8_sparc64_tree/usr/lib/gcc/sparc64-linux-gnu/4.9/crtend.o
  
clang/test/Driver/Inputs/debian_8_sparc64_tree/usr/lib/sparc64-linux-gnu/crt1.o
  
clang/test/Driver/Inputs/debian_8_sparc64_tree/usr/lib/sparc64-linux-gnu/crti.o
  
clang/test/Driver/Inputs/debian_8_sparc64_tree/usr/lib/sparc64-linux-gnu/crtn.o
  
clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/lib/sparc-linux-gnu/.keep
  clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/lib64/.keep
  
clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/usr/include/c++/4.9/backward/.keep
  
clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/usr/include/sparc-linux-gnu/c++/4.9/64/.keep
  
clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/usr/lib/gcc/sparc-linux-gnu/4.9/64/crtbegin.o
  
clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/usr/lib/gcc/sparc-linux-gnu/4.9/64/crtend.o
  
clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/usr/lib/gcc/sparc-linux-gnu/4.9/crtbegin.o
  
clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/usr/lib/gcc/sparc-linux-gnu/4.9/crtend.o
  
clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/usr/lib/sparc-linux-gnu/crt1.o
  
clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/usr/lib/sparc-linux-gnu/crti.o
  
clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/usr/lib/sparc-linux-gnu/crtn.o
  clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/usr/lib64/crt1.o
  clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/usr/lib64/crti.o
  clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/usr/lib64/crtn.o
  clang/test/Driver/Inputs/debian_multiarch_tree/lib/sparc-linux-gnu/.keep
  clang/test/Driver/Inputs/debian_multiarch_tree/lib/sparc64-linux-gnu/.keep
  
clang/test/Driver/Inputs/debian_multiarch_tree/usr/include/c++/4.5/sparc-linux-gnu/.keep
  
clang/test/Driver/Inputs/debian_multiarch_tree/usr/include/c++/4.5/sparc64-linux-gnu/.keep
  
clang/test/Driver/Inputs/debian_multiarch_tree/usr/include/sparc-linux-gnu/.keep
  
clang/test/Driver/Inputs/debian_multiarch_tree/usr/include/sparc64-linux-gnu/.keep
  
clang/test/Driver/Inputs/debian_multiarch_tree/usr/lib/gcc/sparc-linux-gnu/4.5/crtbegin.o
  
clang/test/Driver/Inputs/debian_multiarch_tree/usr/lib/gcc/sparc64-linux-gnu/4.5/crtbegin.o
  clang/test/Driver/Inputs/debian_multiarch_tree/usr/lib/sparc-linux-gnu/.keep
  clang/test/Driver/Inputs/debian_multiarch_tree/usr/lib/sparc64-linux-gnu/.keep
  clang/test/Driver/linux-ld.c


Index: clang/test/Driver/linux-ld.c
===
--- clang/test/Driver/linux-ld.c
+++ clang/test/Driver/linux-ld.c
@@ -1282,67 +1282,32 @@
 // CHECK-DEBIAN-MIPS64EL-N32: 
"-L[[SYSROOT]]/usr/lib/gcc/mipsel-linux-gnu/4.5/../../.."
 // CHECK-DEBIAN-MIPS64EL-N32: "-L[[SYSROOT]]/lib"
 // CHECK-DEBIAN-MIPS64EL-N32: "-L[[SYSROOT]]/usr/lib"
-//
-// Check linker paths on Debian 8 / Sparc
 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
 // RUN: --target=sparc-linux-gnu -rtlib=platform \
 // RUN: --gcc-toolchain="" \
-// RUN: --sysroot=%S/Inputs/debian_8_sparc_multilib_tree \
-// RUN:   | FileCheck --check-prefix=CHECK-DEBIAN-SPARC32 %s
-// CHECK-DEBIAN-SPARC32: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
-// CHECK-DEBIAN-SPARC32: 
"[[SYSROOT]]/usr/lib/gcc/sparc-linux-gnu/4.9/../../../sparc-linux-gnu{{/|}}crt1.o"
-// CHECK-DEBIAN-SPARC32: 
"[[SYSROOT]]/usr/lib/gcc/sparc-linux-gnu/4.9/../../../sparc-linux-gnu{{/|}}crti.o"
-// CHECK-DEBIAN-SPARC32: 
"[[SYSROOT]]/usr/lib/gcc/sparc-linux-gnu/4.9{{/|}}crtbegin.o"
-// CHECK-DEBIAN-SPARC32: "-L[[SYSROOT]]/usr/lib/gcc/sparc-linux-gnu/4.9"
-// CHECK-DEBIAN-SPARC32: 
"-L[[SYSROOT]]/usr/lib/gcc/sparc-linux-gnu/4.9/../../../sparc-linux-gnu"
-// CHECK-DEBIAN-SPARC32: 
"-L[[SYSROOT]]/usr/lib/gcc/sparc-linux-gnu/4.9/../../../../lib"
-// CHECK-DEBIAN-SPARC32: "-L[[SYSROOT]]/lib/sparc-linux-gnu"
-// CHECK-DEBIAN-SPARC32: "-L[[SYSROOT]]/usr/lib/sparc-linux-gnu"
-// 

[PATCH] D90524: [Driver] Enable getOSLibDir() lib32 workaround for SPARC on Linux

2020-11-01 Thread John Paul Adrian Glaubitz via Phabricator via cfe-commits
glaubitz added a comment.

The tests are fixed by this change: https://reviews.llvm.org/D90549.

The tests CHECK-DEBIAN-SPARC32 is outdated and does not reflect the fact that 
sparc and sparc64 use MultiArch on Debian as well.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D90524/new/

https://reviews.llvm.org/D90524

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D90549: [Driver] Switch CHECK-DEBIAN-SPARC tests to use debian_multiarch_tree

2020-11-01 Thread John Paul Adrian Glaubitz via Phabricator via cfe-commits
glaubitz updated this revision to Diff 302131.
glaubitz edited the summary of this revision.
glaubitz added a comment.

Update commit comment to reflect the rename of CHECK-DEBIAN-SPARC32 to 
CHECK-DEBIAN-SPARC.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D90549/new/

https://reviews.llvm.org/D90549

Files:
  clang/test/Driver/Inputs/debian_8_sparc64_tree/lib/sparc64-linux-gnu/.keep
  clang/test/Driver/Inputs/debian_8_sparc64_tree/lib64/.keep
  clang/test/Driver/Inputs/debian_8_sparc64_tree/usr/include/c++/4.9/.keep
  
clang/test/Driver/Inputs/debian_8_sparc64_tree/usr/include/sparc64-linux-gnu/c++/4.9/.keep
  
clang/test/Driver/Inputs/debian_8_sparc64_tree/usr/lib/gcc/sparc64-linux-gnu/4.9/crtbegin.o
  
clang/test/Driver/Inputs/debian_8_sparc64_tree/usr/lib/gcc/sparc64-linux-gnu/4.9/crtend.o
  
clang/test/Driver/Inputs/debian_8_sparc64_tree/usr/lib/sparc64-linux-gnu/crt1.o
  
clang/test/Driver/Inputs/debian_8_sparc64_tree/usr/lib/sparc64-linux-gnu/crti.o
  
clang/test/Driver/Inputs/debian_8_sparc64_tree/usr/lib/sparc64-linux-gnu/crtn.o
  
clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/lib/sparc-linux-gnu/.keep
  clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/lib64/.keep
  
clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/usr/include/c++/4.9/backward/.keep
  
clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/usr/include/sparc-linux-gnu/c++/4.9/64/.keep
  
clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/usr/lib/gcc/sparc-linux-gnu/4.9/64/crtbegin.o
  
clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/usr/lib/gcc/sparc-linux-gnu/4.9/64/crtend.o
  
clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/usr/lib/gcc/sparc-linux-gnu/4.9/crtbegin.o
  
clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/usr/lib/gcc/sparc-linux-gnu/4.9/crtend.o
  
clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/usr/lib/sparc-linux-gnu/crt1.o
  
clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/usr/lib/sparc-linux-gnu/crti.o
  
clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/usr/lib/sparc-linux-gnu/crtn.o
  clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/usr/lib64/crt1.o
  clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/usr/lib64/crti.o
  clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/usr/lib64/crtn.o
  clang/test/Driver/Inputs/debian_multiarch_tree/lib/sparc-linux-gnu/.keep
  clang/test/Driver/Inputs/debian_multiarch_tree/lib/sparc64-linux-gnu/.keep
  
clang/test/Driver/Inputs/debian_multiarch_tree/usr/include/c++/4.5/sparc-linux-gnu/.keep
  
clang/test/Driver/Inputs/debian_multiarch_tree/usr/include/c++/4.5/sparc64-linux-gnu/.keep
  
clang/test/Driver/Inputs/debian_multiarch_tree/usr/include/sparc-linux-gnu/.keep
  
clang/test/Driver/Inputs/debian_multiarch_tree/usr/include/sparc64-linux-gnu/.keep
  
clang/test/Driver/Inputs/debian_multiarch_tree/usr/lib/gcc/sparc-linux-gnu/4.5/crtbegin.o
  
clang/test/Driver/Inputs/debian_multiarch_tree/usr/lib/gcc/sparc64-linux-gnu/4.5/crtbegin.o
  clang/test/Driver/Inputs/debian_multiarch_tree/usr/lib/sparc-linux-gnu/.keep
  clang/test/Driver/Inputs/debian_multiarch_tree/usr/lib/sparc64-linux-gnu/.keep
  clang/test/Driver/linux-ld.c


Index: clang/test/Driver/linux-ld.c
===
--- clang/test/Driver/linux-ld.c
+++ clang/test/Driver/linux-ld.c
@@ -1282,67 +1282,32 @@
 // CHECK-DEBIAN-MIPS64EL-N32: 
"-L[[SYSROOT]]/usr/lib/gcc/mipsel-linux-gnu/4.5/../../.."
 // CHECK-DEBIAN-MIPS64EL-N32: "-L[[SYSROOT]]/lib"
 // CHECK-DEBIAN-MIPS64EL-N32: "-L[[SYSROOT]]/usr/lib"
-//
-// Check linker paths on Debian 8 / Sparc
 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
 // RUN: --target=sparc-linux-gnu -rtlib=platform \
 // RUN: --gcc-toolchain="" \
-// RUN: --sysroot=%S/Inputs/debian_8_sparc_multilib_tree \
-// RUN:   | FileCheck --check-prefix=CHECK-DEBIAN-SPARC32 %s
-// CHECK-DEBIAN-SPARC32: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
-// CHECK-DEBIAN-SPARC32: 
"[[SYSROOT]]/usr/lib/gcc/sparc-linux-gnu/4.9/../../../sparc-linux-gnu{{/|}}crt1.o"
-// CHECK-DEBIAN-SPARC32: 
"[[SYSROOT]]/usr/lib/gcc/sparc-linux-gnu/4.9/../../../sparc-linux-gnu{{/|}}crti.o"
-// CHECK-DEBIAN-SPARC32: 
"[[SYSROOT]]/usr/lib/gcc/sparc-linux-gnu/4.9{{/|}}crtbegin.o"
-// CHECK-DEBIAN-SPARC32: "-L[[SYSROOT]]/usr/lib/gcc/sparc-linux-gnu/4.9"
-// CHECK-DEBIAN-SPARC32: 
"-L[[SYSROOT]]/usr/lib/gcc/sparc-linux-gnu/4.9/../../../sparc-linux-gnu"
-// CHECK-DEBIAN-SPARC32: 
"-L[[SYSROOT]]/usr/lib/gcc/sparc-linux-gnu/4.9/../../../../lib"
-// CHECK-DEBIAN-SPARC32: "-L[[SYSROOT]]/lib/sparc-linux-gnu"
-// CHECK-DEBIAN-SPARC32: "-L[[SYSROOT]]/usr/lib/sparc-linux-gnu"
-// CHECK-DEBIAN-SPARC32: "-L[[SYSROOT]]/lib"
-// CHECK-DEBIAN-SPARC32: "-L[[SYSROOT]]/usr/lib"
-// CHECK-DEBIAN-SPARC32: 
"[[SYSROOT]]/usr/lib/gcc/sparc-linux-gnu/4.9{{/|}}crtend.o"
-// CHECK-DEBIAN-SPARC32: 
"[[SYSROOT]]/usr/lib/gcc/sparc-linux-gnu/4.9/../../../sp

[PATCH] D90533: [clang-format] Always consider option PenaltyBreakBeforeFirstCallParameter

2020-11-01 Thread Mark Nauwelaerts via Phabricator via cfe-commits
mnauw added inline comments.



Comment at: clang/unittests/Format/FormatTest.cpp:4481
   Style.AlignAfterOpenBracket = FormatStyle::BAS_DontAlign;
+  Style.PenaltyBreakBeforeFirstCallParameter = 0;
   Style.AlignOperands = FormatStyle::OAS_DontAlign;

MyDeveloperDay wrote:
> Why do you need these? what is the default value of this as set in the LLVM 
> style?
The default value in the LLVM style is 19.  However, the fragment of code in 
TokenAnnotator.cpp basically hard-codes this to 0 (in case of BAS_DontAlign; 
see that part).  Since that part is now changed to really use 
PenaltyBreakBeforeFirstCallParameter style option, the latter is set to 0 in 
these cases to retain the original behavior.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D90533/new/

https://reviews.llvm.org/D90533

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D90549: [Driver] Switch CHECK-DEBIAN-SPARC tests to use debian_multiarch_tree

2020-11-01 Thread John Paul Adrian Glaubitz via Phabricator via cfe-commits
glaubitz updated this revision to Diff 302133.
glaubitz edited the summary of this revision.
glaubitz added a comment.

Update the patch to include the linux-header-search.cpp tests as well.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D90549/new/

https://reviews.llvm.org/D90549

Files:
  clang/test/Driver/Inputs/debian_8_sparc64_tree/lib64/.keep
  clang/test/Driver/Inputs/debian_8_sparc64_tree/usr/include/c++/4.9/.keep
  
clang/test/Driver/Inputs/debian_8_sparc64_tree/usr/include/sparc64-linux-gnu/c++/4.9/.keep
  
clang/test/Driver/Inputs/debian_8_sparc64_tree/usr/lib/gcc/sparc64-linux-gnu/4.9/crtend.o
  
clang/test/Driver/Inputs/debian_8_sparc64_tree/usr/lib/sparc64-linux-gnu/crt1.o
  
clang/test/Driver/Inputs/debian_8_sparc64_tree/usr/lib/sparc64-linux-gnu/crti.o
  
clang/test/Driver/Inputs/debian_8_sparc64_tree/usr/lib/sparc64-linux-gnu/crtn.o
  
clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/lib/sparc-linux-gnu/.keep
  clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/lib64/.keep
  
clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/usr/lib/gcc/sparc-linux-gnu/4.9/64/crtend.o
  
clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/usr/lib/gcc/sparc-linux-gnu/4.9/crtbegin.o
  
clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/usr/lib/gcc/sparc-linux-gnu/4.9/crtend.o
  
clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/usr/lib/sparc-linux-gnu/crt1.o
  
clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/usr/lib/sparc-linux-gnu/crti.o
  
clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/usr/lib/sparc-linux-gnu/crtn.o
  clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/usr/lib64/crt1.o
  clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/usr/lib64/crti.o
  clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/usr/lib64/crtn.o
  clang/test/Driver/linux-header-search.cpp
  clang/test/Driver/linux-ld.c

Index: clang/test/Driver/linux-ld.c
===
--- clang/test/Driver/linux-ld.c
+++ clang/test/Driver/linux-ld.c
@@ -1282,67 +1282,32 @@
 // CHECK-DEBIAN-MIPS64EL-N32: "-L[[SYSROOT]]/usr/lib/gcc/mipsel-linux-gnu/4.5/../../.."
 // CHECK-DEBIAN-MIPS64EL-N32: "-L[[SYSROOT]]/lib"
 // CHECK-DEBIAN-MIPS64EL-N32: "-L[[SYSROOT]]/usr/lib"
-//
-// Check linker paths on Debian 8 / Sparc
 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
 // RUN: --target=sparc-linux-gnu -rtlib=platform \
 // RUN: --gcc-toolchain="" \
-// RUN: --sysroot=%S/Inputs/debian_8_sparc_multilib_tree \
-// RUN:   | FileCheck --check-prefix=CHECK-DEBIAN-SPARC32 %s
-// CHECK-DEBIAN-SPARC32: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
-// CHECK-DEBIAN-SPARC32: "[[SYSROOT]]/usr/lib/gcc/sparc-linux-gnu/4.9/../../../sparc-linux-gnu{{/|}}crt1.o"
-// CHECK-DEBIAN-SPARC32: "[[SYSROOT]]/usr/lib/gcc/sparc-linux-gnu/4.9/../../../sparc-linux-gnu{{/|}}crti.o"
-// CHECK-DEBIAN-SPARC32: "[[SYSROOT]]/usr/lib/gcc/sparc-linux-gnu/4.9{{/|}}crtbegin.o"
-// CHECK-DEBIAN-SPARC32: "-L[[SYSROOT]]/usr/lib/gcc/sparc-linux-gnu/4.9"
-// CHECK-DEBIAN-SPARC32: "-L[[SYSROOT]]/usr/lib/gcc/sparc-linux-gnu/4.9/../../../sparc-linux-gnu"
-// CHECK-DEBIAN-SPARC32: "-L[[SYSROOT]]/usr/lib/gcc/sparc-linux-gnu/4.9/../../../../lib"
-// CHECK-DEBIAN-SPARC32: "-L[[SYSROOT]]/lib/sparc-linux-gnu"
-// CHECK-DEBIAN-SPARC32: "-L[[SYSROOT]]/usr/lib/sparc-linux-gnu"
-// CHECK-DEBIAN-SPARC32: "-L[[SYSROOT]]/lib"
-// CHECK-DEBIAN-SPARC32: "-L[[SYSROOT]]/usr/lib"
-// CHECK-DEBIAN-SPARC32: "[[SYSROOT]]/usr/lib/gcc/sparc-linux-gnu/4.9{{/|}}crtend.o"
-// CHECK-DEBIAN-SPARC32: "[[SYSROOT]]/usr/lib/gcc/sparc-linux-gnu/4.9/../../../sparc-linux-gnu{{/|}}crtn.o"
-//
-// Check linker paths on Debian 8 / Sparc, with the oldstyle multilib packages
-// RUN: %clang -no-canonical-prefixes -m64 %s -### -o %t.o 2>&1 \
-// RUN: --target=sparc-linux-gnu -rtlib=platform \
-// RUN: --gcc-toolchain="" \
-// RUN: --sysroot=%S/Inputs/debian_8_sparc_multilib_tree \
-// RUN:   | FileCheck --check-prefix=CHECK-DEBIAN-SPARC32-LIB64 %s
-// CHECK-DEBIAN-SPARC32-LIB64: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
-// CHECK-DEBIAN-SPARC32-LIB64: "[[SYSROOT]]/usr/lib/gcc/sparc-linux-gnu/4.9/../../../../lib64{{/|}}crt1.o"
-// CHECK-DEBIAN-SPARC32-LIB64: "[[SYSROOT]]/usr/lib/gcc/sparc-linux-gnu/4.9/../../../../lib64{{/|}}crti.o"
-// CHECK-DEBIAN-SPARC32-LIB64: "[[SYSROOT]]/usr/lib/gcc/sparc-linux-gnu/4.9/64{{/|}}crtbegin.o"
-// CHECK-DEBIAN-SPARC32-LIB64: "-L[[SYSROOT]]/usr/lib/gcc/sparc-linux-gnu/4.9/64"
-// CHECK-DEBIAN-SPARC32-LIB64: "-L[[SYSROOT]]/usr/lib/gcc/sparc-linux-gnu/4.9/../../../../lib64"
-// CHECK-DEBIAN-SPARC32-LIB64: "-L[[SYSROOT]]/lib/../lib64"
-// CHECK-DEBIAN-SPARC32-LIB64: "-L[[SYSROOT]]/usr/lib/../lib64"
-// CHECK-DEBIAN-SPARC32-LIB64: "-L[[SYSROOT]]/usr/lib/gcc/sparc-linux-gnu/4.9"
-// CHECK-DEBIAN-SPARC32-LIB64: "-L[[SYSROOT]]/lib"
-// CHECK-DEBIAN-SPARC32-LIB64: "-L[[SYSROOT]]/usr/lib"
-//

[PATCH] D90549: [Driver] Switch CHECK-DEBIAN-SPARC tests to use debian_multiarch_tree

2020-11-01 Thread John Paul Adrian Glaubitz via Phabricator via cfe-commits
glaubitz updated this revision to Diff 302139.
glaubitz added a comment.

The previous patch accidentally missed the necessary files changes in 
Inputs/debian_multiarch_tree,
let's hope this one is correct now.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D90549/new/

https://reviews.llvm.org/D90549

Files:
  clang/test/Driver/Inputs/debian_8_sparc64_tree/lib/sparc64-linux-gnu/.keep
  clang/test/Driver/Inputs/debian_8_sparc64_tree/lib64/.keep
  clang/test/Driver/Inputs/debian_8_sparc64_tree/usr/include/c++/4.9/.keep
  
clang/test/Driver/Inputs/debian_8_sparc64_tree/usr/include/sparc64-linux-gnu/c++/4.9/.keep
  
clang/test/Driver/Inputs/debian_8_sparc64_tree/usr/lib/gcc/sparc64-linux-gnu/4.9/crtbegin.o
  
clang/test/Driver/Inputs/debian_8_sparc64_tree/usr/lib/gcc/sparc64-linux-gnu/4.9/crtend.o
  
clang/test/Driver/Inputs/debian_8_sparc64_tree/usr/lib/sparc64-linux-gnu/crt1.o
  
clang/test/Driver/Inputs/debian_8_sparc64_tree/usr/lib/sparc64-linux-gnu/crti.o
  
clang/test/Driver/Inputs/debian_8_sparc64_tree/usr/lib/sparc64-linux-gnu/crtn.o
  
clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/lib/sparc-linux-gnu/.keep
  clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/lib64/.keep
  
clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/usr/include/c++/4.9/backward/.keep
  
clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/usr/include/sparc-linux-gnu/c++/4.9/64/.keep
  
clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/usr/lib/gcc/sparc-linux-gnu/4.9/64/crtbegin.o
  
clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/usr/lib/gcc/sparc-linux-gnu/4.9/64/crtend.o
  
clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/usr/lib/gcc/sparc-linux-gnu/4.9/crtbegin.o
  
clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/usr/lib/gcc/sparc-linux-gnu/4.9/crtend.o
  
clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/usr/lib/sparc-linux-gnu/crt1.o
  
clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/usr/lib/sparc-linux-gnu/crti.o
  
clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/usr/lib/sparc-linux-gnu/crtn.o
  clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/usr/lib64/crt1.o
  clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/usr/lib64/crti.o
  clang/test/Driver/Inputs/debian_8_sparc_multilib_tree/usr/lib64/crtn.o
  clang/test/Driver/Inputs/debian_multiarch_tree/lib/sparc-linux-gnu/.keep
  clang/test/Driver/Inputs/debian_multiarch_tree/lib/sparc64-linux-gnu/.keep
  
clang/test/Driver/Inputs/debian_multiarch_tree/usr/include/c++/4.5/sparc-linux-gnu/.keep
  
clang/test/Driver/Inputs/debian_multiarch_tree/usr/include/c++/4.5/sparc64-linux-gnu/.keep
  
clang/test/Driver/Inputs/debian_multiarch_tree/usr/include/sparc-linux-gnu/.keep
  
clang/test/Driver/Inputs/debian_multiarch_tree/usr/include/sparc64-linux-gnu/.keep
  
clang/test/Driver/Inputs/debian_multiarch_tree/usr/lib/gcc/sparc-linux-gnu/4.5/crtbegin.o
  
clang/test/Driver/Inputs/debian_multiarch_tree/usr/lib/gcc/sparc64-linux-gnu/4.5/crtbegin.o
  clang/test/Driver/Inputs/debian_multiarch_tree/usr/lib/sparc-linux-gnu/.keep
  clang/test/Driver/Inputs/debian_multiarch_tree/usr/lib/sparc64-linux-gnu/.keep
  clang/test/Driver/linux-header-search.cpp
  clang/test/Driver/linux-ld.c

Index: clang/test/Driver/linux-ld.c
===
--- clang/test/Driver/linux-ld.c
+++ clang/test/Driver/linux-ld.c
@@ -1282,67 +1282,32 @@
 // CHECK-DEBIAN-MIPS64EL-N32: "-L[[SYSROOT]]/usr/lib/gcc/mipsel-linux-gnu/4.5/../../.."
 // CHECK-DEBIAN-MIPS64EL-N32: "-L[[SYSROOT]]/lib"
 // CHECK-DEBIAN-MIPS64EL-N32: "-L[[SYSROOT]]/usr/lib"
-//
-// Check linker paths on Debian 8 / Sparc
 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
 // RUN: --target=sparc-linux-gnu -rtlib=platform \
 // RUN: --gcc-toolchain="" \
-// RUN: --sysroot=%S/Inputs/debian_8_sparc_multilib_tree \
-// RUN:   | FileCheck --check-prefix=CHECK-DEBIAN-SPARC32 %s
-// CHECK-DEBIAN-SPARC32: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
-// CHECK-DEBIAN-SPARC32: "[[SYSROOT]]/usr/lib/gcc/sparc-linux-gnu/4.9/../../../sparc-linux-gnu{{/|}}crt1.o"
-// CHECK-DEBIAN-SPARC32: "[[SYSROOT]]/usr/lib/gcc/sparc-linux-gnu/4.9/../../../sparc-linux-gnu{{/|}}crti.o"
-// CHECK-DEBIAN-SPARC32: "[[SYSROOT]]/usr/lib/gcc/sparc-linux-gnu/4.9{{/|}}crtbegin.o"
-// CHECK-DEBIAN-SPARC32: "-L[[SYSROOT]]/usr/lib/gcc/sparc-linux-gnu/4.9"
-// CHECK-DEBIAN-SPARC32: "-L[[SYSROOT]]/usr/lib/gcc/sparc-linux-gnu/4.9/../../../sparc-linux-gnu"
-// CHECK-DEBIAN-SPARC32: "-L[[SYSROOT]]/usr/lib/gcc/sparc-linux-gnu/4.9/../../../../lib"
-// CHECK-DEBIAN-SPARC32: "-L[[SYSROOT]]/lib/sparc-linux-gnu"
-// CHECK-DEBIAN-SPARC32: "-L[[SYSROOT]]/usr/lib/sparc-linux-gnu"
-// CHECK-DEBIAN-SPARC32: "-L[[SYSROOT]]/lib"
-// CHECK-DEBIAN-SPARC32: "-L[[SYSROOT]]/usr/lib"
-// CHECK-DEBIAN-SPARC32: "[[SYSROOT]]/usr/lib/gcc/sparc-linux-gnu/4.9{{/|}}crtend.o"
-// CHECK-DEBIAN-SPARC32: "[[SYSROOT]]/usr/lib/g

[PATCH] D87563: [Sema] Improve overload resolution

2020-11-01 Thread Mark de Wever via Phabricator via cfe-commits
Mordante added inline comments.



Comment at: clang/include/clang/Sema/Overload.h:548-549
+
+/// The std::initializer_list expression to convert from.
+const InitListExpr *StandardInitializerListFrom{nullptr};
+

rsmith wrote:
> Storing the `IntListExpr` here doesn't seem like it captures the necessary 
> information. Consider:
> 
> ```
> void f2(std::pair (&&)[]); // #1
> void f2(std::string (&&)[]); // #2
> void g2() { f2({"foo","bar"}); } // should call #2
> ```
> 
> Here, the `InitListExpr` in both cases has two elements. We don't store the 
> converted `InitListExpr`, because we don't -- and aren't allowed to -- build 
> the converted `InitListExpr` until we've chosen the right overload. But I 
> think what we're supposed to do in this case is to notice that calling #1 
> would initialize only one element of the array (one pair), whereas calling #2 
> would initialize two elements of the array, so we should call #2 here.
> 
> In effect, what you need to do is to compute the effective array bound for 
> the case where we're initializing an array of unknown bound, and prefer the 
> conversion sequence with the lower effective array bound. `InitListChecker` 
> already works this out internally, see 
> [here](https://github.com/llvm/llvm-project/blob/c0bcd11068fc13e45b253c6c315882097f94c121/clang/lib/Sema/SemaInit.cpp#L1937),
>  but currently only does that when actually doing the conversion (when not in 
> `VerifyOnly` mode); you'd need to adjust that.
> 
> Given that the code that needs this (the P0388 part) is dead code for now, 
> perhaps the best thing would be to do only the array bound comparison in this 
> patch, and we can compute the proper array bound for said comparison in a 
> future patch.
I've removed the unused code for P0338 for now. Instead of storing the 
`InitListExpr` I've stored the size difference between the array and the 
initializer list.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D87563/new/

https://reviews.llvm.org/D87563

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D87563: [Sema] Improve overload resolution

2020-11-01 Thread Mark de Wever via Phabricator via cfe-commits
Mordante updated this revision to Diff 302140.
Mordante added a comment.

- No longer store the `InitListExpr` instead store the size difference between 
the array and initializer  list.
- Removed the dead code for P0388.
- Don't add overloads where the initializer list has more elements than the 
array to be initialized.
- Since the size validation is simpler now it's directly in 
`CompareImplicitConversionSequences` instead of the helper class 
`CompareListInitializationSequences`.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D87563/new/

https://reviews.llvm.org/D87563

Files:
  clang/include/clang/Sema/Overload.h
  clang/lib/Sema/SemaOverload.cpp
  clang/test/SemaCXX/overload-call.cpp

Index: clang/test/SemaCXX/overload-call.cpp
===
--- clang/test/SemaCXX/overload-call.cpp
+++ clang/test/SemaCXX/overload-call.cpp
@@ -688,3 +688,41 @@
 f(pmf);
   }
 }
+
+#if __cplusplus >= 201103L
+// http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1307
+// DR1307
+// For review are we sure the example with array of unknown bounds is DR1307 and not P0388? P0388 is resolved in
+// https://reviews.llvm.org/D87566
+namespace InitializerListToArray {
+void f(int(&&)[2]); // expected-note {{candidate function not viable}}
+void f(int(&&)[3]); // expected-note {{candidate function not viable}}
+void f(int(&&)[4]); // expected-note {{candidate function not viable}}
+
+void g() {
+  f({1});
+  f({1, 2});
+  f({1, 2, 3});
+  f({1, 2, 3, 4});
+  f({1, 2, 3, 4, 5}); // expected-error {{no matching function for call to 'f'}}
+}
+
+struct S {
+  S();
+  S(double);
+};
+
+void h(S(&&)[2]); // expected-note {{candidate function not viable}}
+void h(S(&&)[3]); // expected-note {{candidate function not viable}}
+void h(S(&&)[4]); // expected-note {{candidate function not viable}}
+
+void i() {
+  h({1});
+  h({1, 2});
+  h({1, 2, 3});
+  h({1, 2, 3, 4});
+  h({1, 2, 3, 4, 5}); // expected-error {{no matching function for call to 'h'}}
+}
+
+} // namespace InitializerListToArray
+#endif
Index: clang/lib/Sema/SemaOverload.cpp
===
--- clang/lib/Sema/SemaOverload.cpp
+++ clang/lib/Sema/SemaOverload.cpp
@@ -3809,6 +3809,15 @@
 if (!ICS1.isStdInitializerListElement() &&
 ICS2.isStdInitializerListElement())
   return ImplicitConversionSequence::Worse;
+
+if (ICS1.isConstantArrayElement() && ICS2.isConstantArrayElement()) {
+  llvm::APInt Diff1 = ICS1.getConstantArraySizeDiff();
+  llvm::APInt Diff2 = ICS2.getConstantArraySizeDiff();
+  if (Diff1.ult(Diff2))
+return ImplicitConversionSequence::Better;
+  if (Diff2.ult(Diff1))
+return ImplicitConversionSequence::Worse;
+}
   }
 
   if (ICS1.isStandard())
@@ -5062,9 +5071,16 @@
   // FIXME: We're missing a lot of these checks.
   bool toStdInitializerList = false;
   QualType X;
-  if (ToType->isArrayType())
+  Optional ArraySizeDiff;
+  if (ToType->isArrayType()) {
+// Has the initializer list exactly N elements or fewer than N elements?
+if (const auto *CAT = S.getASTContext().getAsConstantArrayType(ToType)) {
+  if (CAT->getSize().ult(From->getNumInits()))
+return Result;
+  ArraySizeDiff = CAT->getSize() - From->getNumInits();
+}
 X = S.Context.getAsArrayType(ToType)->getElementType();
-  else
+  } else
 toStdInitializerList = S.isStdInitializerList(ToType, &X);
   if (!X.isNull()) {
 for (unsigned i = 0, e = From->getNumInits(); i < e; ++i) {
@@ -5095,6 +5111,8 @@
 }
 
 Result.setStdInitializerListElement(toStdInitializerList);
+if (ArraySizeDiff)
+  Result.setConstantArraySizeDiff(*ArraySizeDiff);
 return Result;
   }
 
Index: clang/include/clang/Sema/Overload.h
===
--- clang/include/clang/Sema/Overload.h
+++ clang/include/clang/Sema/Overload.h
@@ -539,6 +539,17 @@
 /// sequence only represents the worst element conversion.
 unsigned StdInitializerListElement : 1;
 
+/// Whether the target is really a constant array, and the sequence only
+/// represents the worst element conversion.
+unsigned ConstantArrayElement : 1;
+
+/// The number of elements the std::initalizer_list has less then the
+/// number of elements in the array. A value of 0 means the same number of
+/// elements. If the std::initializer_list has more elements than the array
+/// the conversion sequence will be marked as a bad conversion and this
+/// field won't be used.
+llvm::APInt ConstantArraySizeDiff{};
+
 void setKind(Kind K) {
   destruct();
   ConversionKind = K;
@@ -568,13 +579,17 @@
 };
 
 ImplicitConversionSequence()
-: ConversionKind(Uninitialized), StdInitializerListElement(false) {
+: ConversionKind(Uninitialized), StdInitializerListElement(false),
+  ConstantArrayElement(false) {
   Standar

[PATCH] D90531: [clangd][WIP] Start implementing clang-tidy options into clangd config

2020-11-01 Thread Nathan James via Phabricator via cfe-commits
njames93 updated this revision to Diff 302141.
njames93 added a comment.

Added unittests for reading and compiling config and fixed the bugs causing 
said unittests to fail.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D90531/new/

https://reviews.llvm.org/D90531

Files:
  clang-tools-extra/clangd/CMakeLists.txt
  clang-tools-extra/clangd/Config.h
  clang-tools-extra/clangd/ConfigCompile.cpp
  clang-tools-extra/clangd/ConfigFragment.h
  clang-tools-extra/clangd/ConfigTidyProvider.cpp
  clang-tools-extra/clangd/ConfigTidyProvider.h
  clang-tools-extra/clangd/ConfigYAML.cpp
  clang-tools-extra/clangd/tool/ClangdMain.cpp
  clang-tools-extra/clangd/unittests/ConfigCompileTests.cpp
  clang-tools-extra/clangd/unittests/ConfigYAMLTests.cpp

Index: clang-tools-extra/clangd/unittests/ConfigYAMLTests.cpp
===
--- clang-tools-extra/clangd/unittests/ConfigYAMLTests.cpp
+++ clang-tools-extra/clangd/unittests/ConfigYAMLTests.cpp
@@ -35,6 +35,14 @@
   return false;
 }
 
+MATCHER_P2(PairVal, Value1, Value2, "") {
+  if (*arg.first == Value1 && *arg.second == Value2)
+return true;
+  *result_listener << "values are [" << *arg.first << ", " << *arg.second
+   << "]";
+  return false;
+}
+
 TEST(ParseYAML, SyntacticForms) {
   CapturedDiags Diags;
   const char *YAML = R"yaml(
@@ -50,10 +58,18 @@
 ---
 Index:
   Background: Skip
+---
+ClangTidy: { Enable: true }
+---
+ClangTidy: 
+  Enable: 0
+  CheckOptions: 
+IgnoreMacros: true
+example-check.ExampleOption: 0
   )yaml";
   auto Results = Fragment::parseYAML(YAML, "config.yaml", Diags.callback());
   EXPECT_THAT(Diags.Diagnostics, IsEmpty());
-  ASSERT_EQ(Results.size(), 3u);
+  ASSERT_EQ(Results.size(), 5u);
   EXPECT_FALSE(Results[0].If.HasUnrecognizedCondition);
   EXPECT_THAT(Results[0].If.PathMatch, ElementsAre(Val("abc")));
   EXPECT_THAT(Results[0].CompileFlags.Add, ElementsAre(Val("foo"), Val("bar")));
@@ -62,6 +78,13 @@
 
   ASSERT_TRUE(Results[2].Index.Background);
   EXPECT_EQ("Skip", *Results[2].Index.Background.getValue());
+  ASSERT_TRUE(Results[3].Tidy.Enable);
+  EXPECT_TRUE(**Results[3].Tidy.Enable);
+  ASSERT_TRUE(Results[4].Tidy.Enable);
+  EXPECT_FALSE(**Results[4].Tidy.Enable);
+  EXPECT_THAT(Results[4].Tidy.CheckOptions,
+  ElementsAre(PairVal("IgnoreMacros", "true"),
+  PairVal("example-check.ExampleOption", "0")));
 }
 
 TEST(ParseYAML, Locations) {
@@ -84,26 +107,36 @@
   CapturedDiags Diags;
   Annotations YAML(R"yaml(
 If:
-  [[UnknownCondition]]: "foo"
+  $unknown[[UnknownCondition]]: "foo"
 CompileFlags:
   Add: 'first'
 ---
-CompileFlags: {^
+ClangTidy:
+  Enable: $notBool[[NotABool]]
+---
+CompileFlags: {$unexpected^
 )yaml");
   auto Results =
   Fragment::parseYAML(YAML.code(), "config.yaml", Diags.callback());
 
   ASSERT_THAT(
   Diags.Diagnostics,
-  ElementsAre(AllOf(DiagMessage("Unknown If key UnknownCondition"),
-DiagKind(llvm::SourceMgr::DK_Warning),
-DiagPos(YAML.range().start), DiagRange(YAML.range())),
-  AllOf(DiagMessage("Unexpected token. Expected Key, Flow "
-"Entry, or Flow Mapping End."),
-DiagKind(llvm::SourceMgr::DK_Error),
-DiagPos(YAML.point()), DiagRange(llvm::None;
+  ElementsAre(
+  AllOf(DiagMessage("Unknown If key UnknownCondition"),
+DiagKind(llvm::SourceMgr::DK_Warning),
+DiagPos(YAML.range("unknown").start),
+DiagRange(YAML.range("unknown"))),
+  AllOf(
+  DiagMessage("Couldn't parse 'NotABool' as a boolean for Enable"),
+  DiagKind(llvm::SourceMgr::DK_Warning),
+  DiagPos(YAML.range("notBool").start),
+  DiagRange(YAML.range("notBool"))),
+  AllOf(DiagMessage("Unexpected token. Expected Key, Flow "
+"Entry, or Flow Mapping End."),
+DiagKind(llvm::SourceMgr::DK_Error),
+DiagPos(YAML.point("unexpected")), DiagRange(llvm::None;
 
-  ASSERT_EQ(Results.size(), 1u); // invalid fragment discarded.
+  ASSERT_EQ(Results.size(), 2u); // invalid fragment discarded.
   EXPECT_THAT(Results.front().CompileFlags.Add, ElementsAre(Val("first")));
   EXPECT_TRUE(Results.front().If.HasUnrecognizedCondition);
 }
Index: clang-tools-extra/clangd/unittests/ConfigCompileTests.cpp
===
--- clang-tools-extra/clangd/unittests/ConfigCompileTests.cpp
+++ clang-tools-extra/clangd/unittests/ConfigCompileTests.cpp
@@ -116,6 +116,24 @@
   "Invalid Background value 'Foo'. Valid values are Build, Skip.")));
 }
 
+TEST_F(ConfigCompileTests, Tidy) {
+  Frag.Tidy.Add.emplace_back("bugprone-use-after-move");
+  Frag.Tidy.Add.emplace_back("llvm-*");
+  Frag.Tidy.R

[PATCH] D52050: [Driver] Fix architecture triplets and search paths for Linux x32

2020-11-01 Thread John Paul Adrian Glaubitz via Phabricator via cfe-commits
glaubitz updated this revision to Diff 302142.
glaubitz retitled this revision from "[Driver] Fix search paths on x32" to 
"[Driver] Fix architecture triplets and search paths for Linux x32".
glaubitz edited the summary of this revision.
glaubitz added reviewers: chandlerc, rengolin.
glaubitz added a comment.
Herald added a subscriber: pengfei.
Herald added a project: clang.

Rebase patch for monorepo, add Debian MultiArch tests.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D52050/new/

https://reviews.llvm.org/D52050

Files:
  clang/lib/Driver/ToolChains/Gnu.cpp
  clang/lib/Driver/ToolChains/Linux.cpp
  clang/test/Driver/Inputs/debian_multiarch_tree/lib/x86_64-linux-gnux32/.keep
  
clang/test/Driver/Inputs/debian_multiarch_tree/usr/include/c++/4.5/x86_64-linux-gnux32/.keep
  
clang/test/Driver/Inputs/debian_multiarch_tree/usr/include/x86_64-linux-gnux32/.keep
  
clang/test/Driver/Inputs/debian_multiarch_tree/usr/lib/gcc/x86_64-linux-gnux32/4.5/crtbegin.o
  
clang/test/Driver/Inputs/debian_multiarch_tree/usr/lib/x86_64-linux-gnux32/.keep
  clang/test/Driver/linux-header-search.cpp
  clang/test/Driver/linux-ld.c

Index: clang/test/Driver/linux-ld.c
===
--- clang/test/Driver/linux-ld.c
+++ clang/test/Driver/linux-ld.c
@@ -1170,6 +1170,19 @@
 // CHECK-DEBIAN-X86-64: "-L[[SYSROOT]]/lib"
 // CHECK-DEBIAN-X86-64: "-L[[SYSROOT]]/usr/lib"
 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
+// RUN: --target=x86_64-linux-gnux32 -rtlib=platform \
+// RUN: --gcc-toolchain="" \
+// RUN: --sysroot=%S/Inputs/debian_multiarch_tree \
+// RUN:   | FileCheck --check-prefix=CHECK-DEBIAN-X32 %s
+// CHECK-DEBIAN-X32: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
+// CHECK-DEBIAN-X32: "{{.*}}/usr/lib/gcc/x86_64-linux-gnux32/4.5{{/|}}crtbegin.o"
+// CHECK-DEBIAN-X32: "-L[[SYSROOT]]/usr/lib/gcc/x86_64-linux-gnux32/4.5"
+// CHECK-DEBIAN-X32: "-L[[SYSROOT]]/usr/lib/gcc/x86_64-linux-gnux32/4.5/../../../x86_64-linux-gnux32"
+// CHECK-DEBIAN-X32: "-L[[SYSROOT]]/usr/lib/x86_64-linux-gnux32"
+// CHECK-DEBIAN-X32: "-L[[SYSROOT]]/usr/lib/gcc/x86_64-linux-gnux32/4.5/../../.."
+// CHECK-DEBIAN-X32: "-L[[SYSROOT]]/lib"
+// CHECK-DEBIAN-X32: "-L[[SYSROOT]]/usr/lib"
+// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
 // RUN: --target=powerpc-linux-gnu -rtlib=platform \
 // RUN: --gcc-toolchain="" \
 // RUN: --sysroot=%S/Inputs/debian_multiarch_tree \
Index: clang/test/Driver/linux-header-search.cpp
===
--- clang/test/Driver/linux-header-search.cpp
+++ clang/test/Driver/linux-header-search.cpp
@@ -224,7 +224,23 @@
 // CHECK-DEBIAN-X86-64: "-internal-isystem" "[[RESOURCE_DIR]]{{/|}}include"
 // CHECK-DEBIAN-X86-64: "-internal-externc-isystem" "[[SYSROOT]]/usr/include/x86_64-linux-gnu"
 // CHECK-DEBIAN-X86-64: "-internal-externc-isystem" "[[SYSROOT]]/include"
-// CHECK-DEBIAN-X86-64: "-internal-externc-isystem" "[[SYSROOT]]/usr/include"
+// CHECK-DEBIAN-X86-64: "-internal-externc-isystem" "[[SYSROOT]]/usr/include
+// RUN: %clang -no-canonical-prefixes %s -### -fsyntax-only 2>&1 \
+// RUN: -target x86_64-linux-gnux32 -stdlib=libstdc++ \
+// RUN: --sysroot=%S/Inputs/debian_multiarch_tree \
+// RUN: --gcc-toolchain="" \
+// RUN:   | FileCheck --check-prefix=CHECK-DEBIAN-X32 %s
+// CHECK-DEBIAN-X32: "{{[^"]*}}clang{{[^"]*}}" "-cc1"
+// CHECK-DEBIAN-X32: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
+// CHECK-DEBIAN-X32: "-isysroot" "[[SYSROOT:[^"]+]]"
+// CHECK-DEBIAN-X32: "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/x86_64-linux-gnux32/4.5/../../../../include/c++/4.5"
+// CHECK-DEBIAN-X32: "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/x86_64-linux-gnux32/4.5/../../../../include/c++/4.5/x86_64-linux-gnux32"
+// CHECK-DEBIAN-X32: "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/x86_64-linux-gnux32/4.5/../../../../include/c++/4.5/backward"
+// CHECK-DEBIAN-X32: "-internal-isystem" "[[SYSROOT]]/usr/local/include"
+// CHECK-DEBIAN-X32: "-internal-isystem" "[[RESOURCE_DIR]]{{/|}}include"
+// CHECK-DEBIAN-X32: "-internal-externc-isystem" "[[SYSROOT]]/usr/include/x86_64-linux-gnux32"
+// CHECK-DEBIAN-X32: "-internal-externc-isystem" "[[SYSROOT]]/include"
+// CHECK-DEBIAN-X32: "-internal-externc-isystem" "[[SYSROOT]]/usr/include"
 // RUN: %clang -no-canonical-prefixes %s -### -fsyntax-only 2>&1 \
 // RUN: -target powerpc-linux-gnu -stdlib=libstdc++ \
 // RUN: --sysroot=%S/Inputs/debian_multiarch_tree \
Index: clang/lib/Driver/ToolChains/Linux.cpp
===
--- clang/lib/Driver/ToolChains/Linux.cpp
+++ clang/lib/Driver/ToolChains/Linux.cpp
@@ -87,10 +87,13 @@
   case llvm::Triple::x86_64:
 if (IsAndroid)
   return "x86_64-linux-android";
-// We don't want this for x32, otherwise it will match x86_64 libs
-if (TargetEnvironment != llvm::Tripl

[PATCH] D90552: [clangd] Set the User option for clang-tidy to mimick its behaviour

2020-11-01 Thread Nathan James via Phabricator via cfe-commits
njames93 created this revision.
njames93 added a reviewer: sammccall.
Herald added subscribers: cfe-commits, usaxena95, kadircet, arphaman.
Herald added a project: clang.
njames93 requested review of this revision.
Herald added subscribers: MaskRay, ilya-biryukov.

Probably not essential as afaik only one check uses this field. but still good 
to have consistent behaviour.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D90552

Files:
  clang-tools-extra/clangd/tool/ClangdMain.cpp


Index: clang-tools-extra/clangd/tool/ClangdMain.cpp
===
--- clang-tools-extra/clangd/tool/ClangdMain.cpp
+++ clang-tools-extra/clangd/tool/ClangdMain.cpp
@@ -808,6 +808,9 @@
   if (EnableClangTidy) {
 auto EmptyDefaults = tidy::ClangTidyOptions::getDefaults();
 EmptyDefaults.Checks.reset(); // So we can tell if checks were ever set.
+EmptyDefaults.User = llvm::sys::Process::GetEnv("USER");
+if (!EmptyDefaults.User)
+  EmptyDefaults.User = llvm::sys::Process::GetEnv("USEUSERNAMER");
 tidy::ClangTidyOptions OverrideClangTidyOptions;
 if (!ClangTidyChecks.empty())
   OverrideClangTidyOptions.Checks = ClangTidyChecks;


Index: clang-tools-extra/clangd/tool/ClangdMain.cpp
===
--- clang-tools-extra/clangd/tool/ClangdMain.cpp
+++ clang-tools-extra/clangd/tool/ClangdMain.cpp
@@ -808,6 +808,9 @@
   if (EnableClangTidy) {
 auto EmptyDefaults = tidy::ClangTidyOptions::getDefaults();
 EmptyDefaults.Checks.reset(); // So we can tell if checks were ever set.
+EmptyDefaults.User = llvm::sys::Process::GetEnv("USER");
+if (!EmptyDefaults.User)
+  EmptyDefaults.User = llvm::sys::Process::GetEnv("USEUSERNAMER");
 tidy::ClangTidyOptions OverrideClangTidyOptions;
 if (!ClangTidyChecks.empty())
   OverrideClangTidyOptions.Checks = ClangTidyChecks;
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D90534: [clang-format] Add new option PenaltyIndentedWhitespace

2020-11-01 Thread Mark Nauwelaerts via Phabricator via cfe-commits
mnauw updated this revision to Diff 302144.
mnauw added a comment.

Patch updated to include unit test and documentation changes (and to use full 
diff).


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D90534/new/

https://reviews.llvm.org/D90534

Files:
  clang/docs/ClangFormatStyleOptions.rst
  clang/include/clang/Format/Format.h
  clang/lib/Format/ContinuationIndenter.cpp
  clang/lib/Format/Format.cpp
  clang/unittests/Format/FormatTest.cpp

Index: clang/unittests/Format/FormatTest.cpp
===
--- clang/unittests/Format/FormatTest.cpp
+++ clang/unittests/Format/FormatTest.cpp
@@ -17167,6 +17167,28 @@
Style);
 }
 
+TEST_F(FormatTest, PenaltyIndentedWhitespace) {
+  verifyFormat("Constructor()\n"
+   ": aa(aa), aa(\n"
+   "  (aa, "
+   "aat))");
+  verifyFormat("Constructor()\n"
+   ": a(aa), "
+   "aa(aa)");
+
+  FormatStyle StyleWithWhitespacePenalty = getLLVMStyle();
+  StyleWithWhitespacePenalty.PenaltyIndentedWhitespace = 5;
+  verifyFormat("Constructor()\n"
+   ": aa(aa),\n"
+   "  aa(\n"
+   "  (aa, aat))",
+   StyleWithWhitespacePenalty);
+  verifyFormat("Constructor()\n"
+   ": a(aa), "
+   "aa(aa)",
+   StyleWithWhitespacePenalty);
+}
+
 TEST_F(FormatTest, LLVMDefaultStyle) {
   FormatStyle Style = getLLVMStyle();
   verifyFormat("extern \"C\" {\n"
Index: clang/lib/Format/Format.cpp
===
--- clang/lib/Format/Format.cpp
+++ clang/lib/Format/Format.cpp
@@ -597,6 +597,8 @@
 IO.mapOptional("PenaltyExcessCharacter", Style.PenaltyExcessCharacter);
 IO.mapOptional("PenaltyReturnTypeOnItsOwnLine",
Style.PenaltyReturnTypeOnItsOwnLine);
+IO.mapOptional("PenaltyIndentedWhitespace",
+   Style.PenaltyIndentedWhitespace);
 IO.mapOptional("PointerAlignment", Style.PointerAlignment);
 IO.mapOptional("RawStringFormats", Style.RawStringFormats);
 IO.mapOptional("ReflowComments", Style.ReflowComments);
@@ -975,6 +977,7 @@
   LLVMStyle.PenaltyReturnTypeOnItsOwnLine = 60;
   LLVMStyle.PenaltyBreakBeforeFirstCallParameter = 19;
   LLVMStyle.PenaltyBreakTemplateDeclaration = prec::Relational;
+  LLVMStyle.PenaltyIndentedWhitespace = 0;
 
   LLVMStyle.DisableFormat = false;
   LLVMStyle.SortIncludes = true;
Index: clang/lib/Format/ContinuationIndenter.cpp
===
--- clang/lib/Format/ContinuationIndenter.cpp
+++ clang/lib/Format/ContinuationIndenter.cpp
@@ -783,6 +783,22 @@
 
   State.Column = getNewLineColumn(State);
 
+  // Add Penalty proportional to amount of whitespace away from FirstColumn
+  // This tends to penalize several lines that are far-right indented,
+  // and prefers a line-break prior to such a block, e.g:
+  //
+  // Constructor() :
+  //   member(value), long_member(
+  //  looong_call(param_1, param_2, param_3))
+  // would then become
+  // Constructor() :
+  //   member(value),
+  //   long_member(
+  //   looong_call(param_1, param_2, param_3))
+  if (State.Column > State.FirstIndent)
+Penalty +=
+Style.PenaltyIndentedWhitespace * (State.Column - State.FirstIndent);
+
   // Indent nested blocks relative to this column, unless in a very specific
   // JavaScript special case where:
   //
Index: clang/include/clang/Format/Format.h
===
--- clang/include/clang/Format/Format.h
+++ clang/include/clang/Format/Format.h
@@ -1913,6 +1913,10 @@
   /// line.
   unsigned PenaltyReturnTypeOnItsOwnLine;
 
+  /// Penalty for each character of whitespace indentation
+  /// (counted relative to leading non-whitespace column).
+  unsigned PenaltyIndentedWhitespace;
+
   /// The ``&`` and ``*`` alignment style.
   enum PointerAlignmentStyle {
 /// Align pointer to the left.
Index: clang/docs/ClangFormatStyleOptions.rst
===
--- clang/docs/ClangFormatStyleOptions.rst
+++ clang/docs/ClangFormatStyleOptions.rst
@@ -2301,6 +2301,10 @@
 **PenaltyExcessCharacter** (``unsigned``)
   The penalty for each character outside of the column limit.
 
+**PenaltyIndentedWhitespace** (``unsigned``)
+  Penalty for each character of whitespace indentation
+  (counted relative to leading non-whitespace column).
+
 **PenaltyReturnTypeOnItsOwnLine** (``unsigned``)
   Penalty 

[PATCH] D90553: Rename CXXUnresolvedConstructExpr::arg_size for consistency

2020-11-01 Thread Stephen Kelly via Phabricator via cfe-commits
steveire created this revision.
steveire added reviewers: aaron.ballman, ymandel.
Herald added subscribers: cfe-commits, martong.
Herald added a reviewer: shafik.
Herald added a project: clang.
steveire requested review of this revision.

Make it possible to use argumentCountIs and hasArgument with
CXXUnresolvedConstructExpr.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D90553

Files:
  clang/include/clang/AST/ExprCXX.h
  clang/include/clang/ASTMatchers/ASTMatchers.h
  clang/lib/AST/ASTImporter.cpp
  clang/lib/AST/ItaniumMangle.cpp
  clang/lib/Sema/TreeTransform.h
  clang/lib/Serialization/ASTReaderStmt.cpp
  clang/lib/Serialization/ASTWriterStmt.cpp
  clang/unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp

Index: clang/unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp
===
--- clang/unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp
+++ clang/unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp
@@ -1613,6 +1613,24 @@
  Constructor1Arg));
 }
 
+TEST(ASTMatchersTest, ArgumentCountIs_CXXUnresolvedConstructExpr) {
+  auto Code = "template  struct S{}; template  void "
+  "x() { auto s = S(); }";
+
+  EXPECT_TRUE(matches(Code, cxxUnresolvedConstructExpr(argumentCountIs(0;
+  EXPECT_TRUE(notMatches(Code, cxxUnresolvedConstructExpr(argumentCountIs(1;
+}
+
+TEST(ASTMatchersTest, HasArgument_CXXUnresolvedConstructExpr) {
+  auto Code = "template  struct S{ S(int){} }; template  void x() { int y; auto s = S(y); }";
+  EXPECT_TRUE(matches(Code, cxxUnresolvedConstructExpr(hasArgument(
+0, declRefExpr(to(varDecl(hasName("y";
+  EXPECT_TRUE(
+  notMatches(Code, cxxUnresolvedConstructExpr(hasArgument(
+   0, declRefExpr(to(varDecl(hasName("x";
+}
+
 TEST_P(ASTMatchersTest, IsListInitialization) {
   if (!GetParam().isCXX11OrLater()) {
 return;
Index: clang/lib/Serialization/ASTWriterStmt.cpp
===
--- clang/lib/Serialization/ASTWriterStmt.cpp
+++ clang/lib/Serialization/ASTWriterStmt.cpp
@@ -1900,7 +1900,7 @@
 void
 ASTStmtWriter::VisitCXXUnresolvedConstructExpr(CXXUnresolvedConstructExpr *E) {
   VisitExpr(E);
-  Record.push_back(E->arg_size());
+  Record.push_back(E->getNumArgs());
   for (CXXUnresolvedConstructExpr::arg_iterator
  ArgI = E->arg_begin(), ArgE = E->arg_end(); ArgI != ArgE; ++ArgI)
 Record.AddStmt(*ArgI);
Index: clang/lib/Serialization/ASTReaderStmt.cpp
===
--- clang/lib/Serialization/ASTReaderStmt.cpp
+++ clang/lib/Serialization/ASTReaderStmt.cpp
@@ -1990,10 +1990,10 @@
 void
 ASTStmtReader::VisitCXXUnresolvedConstructExpr(CXXUnresolvedConstructExpr *E) {
   VisitExpr(E);
-  assert(Record.peekInt() == E->arg_size() &&
+  assert(Record.peekInt() == E->getNumArgs() &&
  "Read wrong record during creation ?");
   Record.skipInts(1);
-  for (unsigned I = 0, N = E->arg_size(); I != N; ++I)
+  for (unsigned I = 0, N = E->getNumArgs(); I != N; ++I)
 E->setArg(I, Record.readSubExpr());
   E->TSI = readTypeSourceInfo();
   E->setLParenLoc(readSourceLocation());
Index: clang/lib/Sema/TreeTransform.h
===
--- clang/lib/Sema/TreeTransform.h
+++ clang/lib/Sema/TreeTransform.h
@@ -12745,12 +12745,12 @@
 
   bool ArgumentChanged = false;
   SmallVector Args;
-  Args.reserve(E->arg_size());
+  Args.reserve(E->getNumArgs());
   {
 EnterExpressionEvaluationContext Context(
 getSema(), EnterExpressionEvaluationContext::InitList,
 E->isListInitialization());
-if (getDerived().TransformExprs(E->arg_begin(), E->arg_size(), true, Args,
+if (getDerived().TransformExprs(E->arg_begin(), E->getNumArgs(), true, Args,
 &ArgumentChanged))
   return ExprError();
   }
Index: clang/lib/AST/ItaniumMangle.cpp
===
--- clang/lib/AST/ItaniumMangle.cpp
+++ clang/lib/AST/ItaniumMangle.cpp
@@ -4175,7 +4175,7 @@
 
   case Expr::CXXUnresolvedConstructExprClass: {
 const CXXUnresolvedConstructExpr *CE = cast(E);
-unsigned N = CE->arg_size();
+unsigned N = CE->getNumArgs();
 
 if (CE->isListInitialization()) {
   assert(N == 1 && "unexpected form for list initialization");
Index: clang/lib/AST/ASTImporter.cpp
===
--- clang/lib/AST/ASTImporter.cpp
+++ clang/lib/AST/ASTImporter.cpp
@@ -7539,7 +7539,7 @@
   if (Err)
 return std::move(Err);
 
-  SmallVector ToArgs(E->arg_size());
+  SmallVector ToArgs(E->getNumArgs());
   if (Error Err =
   ImportArrayChecked(E->arg_begin(), E->arg_end(), ToArgs.begin()))
 return std::move(Err);
Index: clang/include/clang/ASTMatchers/ASTMatchers.h

[PATCH] D90555: [clangd] Handle duplicate enum constants in PopulateSwitch tweak

2020-11-01 Thread Nathan James via Phabricator via cfe-commits
njames93 created this revision.
njames93 added a reviewer: sammccall.
Herald added subscribers: cfe-commits, usaxena95, kadircet, arphaman.
Herald added a project: clang.
njames93 requested review of this revision.
Herald added subscribers: MaskRay, ilya-biryukov.

If an enum has different names for the same constant, make sure only the first 
one declared gets added into the switch. Failing to do so results in a compiler 
error as 2 case labels can't represent the same value.

  enum Numbers{
  One,
  Un = One,
  Two,
  Deux = Two,
  Three,
  Trois = Three
  };
  
  // Old behaviour
  switch () {
case One:
case Un:
case Two:
case Duex:
case Three:
case Trois: break;
  }
  
  // New behaviour
  switch () {
case One:
case Two:
case Three: break;
  }


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D90555

Files:
  clang-tools-extra/clangd/refactor/tweaks/PopulateSwitch.cpp
  clang-tools-extra/clangd/unittests/TweakTests.cpp


Index: clang-tools-extra/clangd/unittests/TweakTests.cpp
===
--- clang-tools-extra/clangd/unittests/TweakTests.cpp
+++ clang-tools-extra/clangd/unittests/TweakTests.cpp
@@ -2980,6 +2980,12 @@
 void function() { switch (ns::A) {case ns::A:break;} }
   )"",
   },
+  {
+  // Selection on duplicate token enum
+  Function,
+  R""(enum Enum {A,B,b=B}; ^switch (A) {})"",
+  R""(enum Enum {A,B,b=B}; switch (A) {case A:case B:break;})"",
+  },
   };
 
   for (const auto &Case : Cases) {
Index: clang-tools-extra/clangd/refactor/tweaks/PopulateSwitch.cpp
===
--- clang-tools-extra/clangd/refactor/tweaks/PopulateSwitch.cpp
+++ clang-tools-extra/clangd/refactor/tweaks/PopulateSwitch.cpp
@@ -166,7 +166,10 @@
 
   std::string Text;
   for (EnumConstantDecl *Enumerator : EnumD->enumerators()) {
-if (ExistingEnumerators.contains(Enumerator->getInitVal()))
+// Try to insert this Enumerator into the set. If this fails, the value was
+// either already there to begin with or we have already added it using a
+// different name.
+if (!ExistingEnumerators.insert(Enumerator->getInitVal()).second)
   continue;
 
 Text += "case ";


Index: clang-tools-extra/clangd/unittests/TweakTests.cpp
===
--- clang-tools-extra/clangd/unittests/TweakTests.cpp
+++ clang-tools-extra/clangd/unittests/TweakTests.cpp
@@ -2980,6 +2980,12 @@
 void function() { switch (ns::A) {case ns::A:break;} }
   )"",
   },
+  {
+  // Selection on duplicate token enum
+  Function,
+  R""(enum Enum {A,B,b=B}; ^switch (A) {})"",
+  R""(enum Enum {A,B,b=B}; switch (A) {case A:case B:break;})"",
+  },
   };
 
   for (const auto &Case : Cases) {
Index: clang-tools-extra/clangd/refactor/tweaks/PopulateSwitch.cpp
===
--- clang-tools-extra/clangd/refactor/tweaks/PopulateSwitch.cpp
+++ clang-tools-extra/clangd/refactor/tweaks/PopulateSwitch.cpp
@@ -166,7 +166,10 @@
 
   std::string Text;
   for (EnumConstantDecl *Enumerator : EnumD->enumerators()) {
-if (ExistingEnumerators.contains(Enumerator->getInitVal()))
+// Try to insert this Enumerator into the set. If this fails, the value was
+// either already there to begin with or we have already added it using a
+// different name.
+if (!ExistingEnumerators.insert(Enumerator->getInitVal()).second)
   continue;
 
 Text += "case ";
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D90549: [Driver] Switch CHECK-DEBIAN-SPARC tests to use debian_multiarch_tree

2020-11-01 Thread John Paul Adrian Glaubitz via Phabricator via cfe-commits
glaubitz added a comment.

This change is required to fix testsuite failures as a result of this fix: 
https://reviews.llvm.org/D90524


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D90549/new/

https://reviews.llvm.org/D90549

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D61989: [clang-tidy] enable modernize-concat-nested-namespaces on header files

2020-11-01 Thread Nathan James via Phabricator via cfe-commits
njames93 added a comment.

In D61989#2314544 , @collinjackson 
wrote:

> Are there any updates on this change? I see there's a comment that hasn't 
> been addressed yet. Is that the only roadblock stopping this from getting 
> merged?

Tbh clang-tidy already handles disabling warnings for header files, so some of 
the code here isn't needed


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D61989/new/

https://reviews.llvm.org/D61989

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D90535: [clang-tidy] Allow -warnings-as-errors to be specified from run_clang_tidy.py

2020-11-01 Thread Christian Schärf via Phabricator via cfe-commits
schaerfo updated this revision to Diff 302152.

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D90535/new/

https://reviews.llvm.org/D90535

Files:
  clang-tools-extra/clang-tidy/tool/run-clang-tidy.py


Index: clang-tools-extra/clang-tidy/tool/run-clang-tidy.py
===
--- clang-tools-extra/clang-tidy/tool/run-clang-tidy.py
+++ clang-tools-extra/clang-tidy/tool/run-clang-tidy.py
@@ -81,7 +81,8 @@
 
 def get_tidy_invocation(f, clang_tidy_binary, checks, tmpdir, build_path,
 header_filter, allow_enabling_alpha_checkers,
-extra_arg, extra_arg_before, quiet, config):
+extra_arg, extra_arg_before, quiet, config,
+warnings_as_errors):
   """Gets a command line for clang-tidy."""
   start = [clang_tidy_binary]
   if allow_enabling_alpha_checkers:
@@ -106,6 +107,8 @@
   start.append('-quiet')
   if config:
   start.append('-config=' + config)
+  if warnings_as_errors:
+  start.append('-warnings-as-errors=' + warnings_as_errors)
   start.append(f)
   return start
 
@@ -165,7 +168,7 @@
  tmpdir, build_path, args.header_filter,
  args.allow_enabling_alpha_checkers,
  args.extra_arg, args.extra_arg_before,
- args.quiet, args.config)
+ args.quiet, args.config, 
args.warnings_as_errors)
 
 proc = subprocess.Popen(invocation, stdout=subprocess.PIPE, 
stderr=subprocess.PIPE)
 output, err = proc.communicate()
@@ -234,6 +237,9 @@
   'command line.')
   parser.add_argument('-quiet', action='store_true',
   help='Run clang-tidy in quiet mode')
+  parser.add_argument('-warnings-as-errors', default=None,
+  help='Upgrades warnings to errors. Does not enable '
+  'any warnings py itself.')
   args = parser.parse_args()
 
   db_path = 'compile_commands.json'


Index: clang-tools-extra/clang-tidy/tool/run-clang-tidy.py
===
--- clang-tools-extra/clang-tidy/tool/run-clang-tidy.py
+++ clang-tools-extra/clang-tidy/tool/run-clang-tidy.py
@@ -81,7 +81,8 @@
 
 def get_tidy_invocation(f, clang_tidy_binary, checks, tmpdir, build_path,
 header_filter, allow_enabling_alpha_checkers,
-extra_arg, extra_arg_before, quiet, config):
+extra_arg, extra_arg_before, quiet, config,
+warnings_as_errors):
   """Gets a command line for clang-tidy."""
   start = [clang_tidy_binary]
   if allow_enabling_alpha_checkers:
@@ -106,6 +107,8 @@
   start.append('-quiet')
   if config:
   start.append('-config=' + config)
+  if warnings_as_errors:
+  start.append('-warnings-as-errors=' + warnings_as_errors)
   start.append(f)
   return start
 
@@ -165,7 +168,7 @@
  tmpdir, build_path, args.header_filter,
  args.allow_enabling_alpha_checkers,
  args.extra_arg, args.extra_arg_before,
- args.quiet, args.config)
+ args.quiet, args.config, args.warnings_as_errors)
 
 proc = subprocess.Popen(invocation, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 output, err = proc.communicate()
@@ -234,6 +237,9 @@
   'command line.')
   parser.add_argument('-quiet', action='store_true',
   help='Run clang-tidy in quiet mode')
+  parser.add_argument('-warnings-as-errors', default=None,
+  help='Upgrades warnings to errors. Does not enable '
+  'any warnings py itself.')
   args = parser.parse_args()
 
   db_path = 'compile_commands.json'
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D90535: [clang-tidy] Allow -warnings-as-errors to be specified from run_clang_tidy.py

2020-11-01 Thread Christian Schärf via Phabricator via cfe-commits
schaerfo added a comment.

In D90535#2366731 , @njames93 wrote:

> Just a general drive by comment, there have been quite a few patches recently 
> that add arguments that just get forwarded straight to clang-tidy, would it 
> not be a whole lot simpler if we could just automatically forward arguments 
> straight to clang-tidy.

That is indeed an idea worth considering, perhaps I can start working on it. It 
would, however, not be backwards compatible.

> Anyway aside from that, please upload diffs with the full context, see 
> https://llvm.org/docs/Phabricator.html#phabricator-request-review-web for 
> more info.

I have updated the revision to show the entire diff.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D90535/new/

https://reviews.llvm.org/D90535

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D90568: [clang] Add [is|set]Nested methods to NamespaceDecl

2020-11-01 Thread Nathan James via Phabricator via cfe-commits
njames93 created this revision.
njames93 added a reviewer: rsmith.
Herald added subscribers: cfe-commits, martong.
Herald added a reviewer: shafik.
Herald added a project: clang.
njames93 requested review of this revision.

Adds support for NamespaceDecl to inform if its part of a nested namespace.
This flag only corresponds to the outer namespaces in a nested namespace 
declaration.
In this example:
namespace  {}
Only  and  will be classified as nested.

This flag isn't meant for assisting in building the AST, more for static 
analysis and refactorings.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D90568

Files:
  clang/include/clang/AST/Decl.h
  clang/include/clang/Sema/Sema.h
  clang/lib/AST/ASTContext.cpp
  clang/lib/AST/ASTImporter.cpp
  clang/lib/AST/DeclCXX.cpp
  clang/lib/AST/TextNodeDumper.cpp
  clang/lib/Parse/ParseDeclCXX.cpp
  clang/lib/Sema/SemaDeclCXX.cpp
  clang/lib/Serialization/ASTReaderDecl.cpp
  clang/lib/Serialization/ASTWriterDecl.cpp
  clang/test/AST/ast-dump-decl.cpp
  clang/unittests/Sema/ExternalSemaSourceTest.cpp

Index: clang/unittests/Sema/ExternalSemaSourceTest.cpp
===
--- clang/unittests/Sema/ExternalSemaSourceTest.cpp
+++ clang/unittests/Sema/ExternalSemaSourceTest.cpp
@@ -121,7 +121,7 @@
   CurrentSema->getPreprocessor().getIdentifierInfo(CorrectTo);
   NamespaceDecl *NewNamespace =
   NamespaceDecl::Create(Context, DestContext, false, Typo.getBeginLoc(),
-Typo.getLoc(), ToIdent, nullptr);
+Typo.getLoc(), ToIdent, nullptr, false);
   DestContext->addDecl(NewNamespace);
   TypoCorrection Correction(ToIdent);
   Correction.addCorrectionDecl(NewNamespace);
Index: clang/test/AST/ast-dump-decl.cpp
===
--- clang/test/AST/ast-dump-decl.cpp
+++ clang/test/AST/ast-dump-decl.cpp
@@ -53,6 +53,23 @@
 }
 // CHECK:  NamespaceDecl{{.*}} TestNamespaceDeclInline inline
 
+namespace TestNestedNameSpace::Nested {
+}
+// CHECK:  NamespaceDecl{{.*}} TestNestedNameSpace nested
+// CHECK:  NamespaceDecl{{.*}} Nested{{\s*$}}
+
+namespace TestMultipleNested::SecondLevelNested::Nested {
+}
+// CHECK:  NamespaceDecl{{.*}} TestMultipleNested nested
+// CHECK:  NamespaceDecl{{.*}} SecondLevelNested nested
+// CHECK:  NamespaceDecl{{.*}} Nested{{\s*$}}
+
+namespace TestInlineNested::inline SecondLevel::inline Nested{
+}
+// CHECK:  NamespaceDecl{{.*}} TestInlineNested nested
+// CHECK:  NamespaceDecl{{.*}} SecondLevel inline nested
+// CHECK:  NamespaceDecl{{.*}} Nested inline{{\s*$}}
+
 namespace testUsingDirectiveDecl {
   namespace A {
   }
Index: clang/lib/Serialization/ASTWriterDecl.cpp
===
--- clang/lib/Serialization/ASTWriterDecl.cpp
+++ clang/lib/Serialization/ASTWriterDecl.cpp
@@ -1234,6 +1234,7 @@
   VisitRedeclarable(D);
   VisitNamedDecl(D);
   Record.push_back(D->isInline());
+  Record.push_back(D->isNested());
   Record.AddSourceLocation(D->getBeginLoc());
   Record.AddSourceLocation(D->getRBraceLoc());
 
Index: clang/lib/Serialization/ASTReaderDecl.cpp
===
--- clang/lib/Serialization/ASTReaderDecl.cpp
+++ clang/lib/Serialization/ASTReaderDecl.cpp
@@ -1594,6 +1594,7 @@
   RedeclarableResult Redecl = VisitRedeclarable(D);
   VisitNamedDecl(D);
   D->setInline(Record.readInt());
+  D->setNested(Record.readInt());
   D->LocStart = readSourceLocation();
   D->RBraceLoc = readSourceLocation();
 
@@ -1607,7 +1608,7 @@
   } else {
 // Link this namespace back to the first declaration, which has already
 // been deserialized.
-D->AnonOrFirstNamespaceAndInline.setPointer(D->getFirstDecl());
+D->AnonOrFirstNamespaceAndFlags.setPointer(D->getFirstDecl());
   }
 
   mergeRedeclarable(D, Redecl);
@@ -2594,8 +2595,8 @@
 // We cannot have loaded any redeclarations of this declaration yet, so
 // there's nothing else that needs to be updated.
 if (auto *Namespace = dyn_cast(D))
-  Namespace->AnonOrFirstNamespaceAndInline.setPointer(
-  assert_cast(ExistingCanon));
+  Namespace->AnonOrFirstNamespaceAndFlags.setPointer(
+  assert_cast(ExistingCanon));
 
 // When we merge a template, merge its pattern.
 if (auto *DTemplate = dyn_cast(D))
Index: clang/lib/Sema/SemaDeclCXX.cpp
===
--- clang/lib/Sema/SemaDeclCXX.cpp
+++ clang/lib/Sema/SemaDeclCXX.cpp
@@ -10824,10 +10824,13 @@
 
 /// ActOnStartNamespaceDef - This is called at the start of a namespace
 /// definition.
-Decl *Sema::ActOnStartNamespaceDef(
-Scope *NamespcScope, SourceLocation InlineLoc, SourceLocation NamespaceLoc,
-SourceLocation IdentLoc, IdentifierInfo *II, SourceLocation LBrace,
-const ParsedAttributesView 

[PATCH] D90571: [compiler-rt] [ubsan] Use the itanium type info lookup for mingw targets

2020-11-01 Thread Martin Storsjö via Phabricator via cfe-commits
mstorsjo created this revision.
mstorsjo added a reviewer: rnk.
Herald added subscribers: Sanitizers, dberris.
Herald added a project: Sanitizers.
mstorsjo requested review of this revision.

Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D90571

Files:
  compiler-rt/lib/ubsan/ubsan_type_hash_itanium.cpp
  compiler-rt/lib/ubsan/ubsan_type_hash_win.cpp


Index: compiler-rt/lib/ubsan/ubsan_type_hash_win.cpp
===
--- compiler-rt/lib/ubsan/ubsan_type_hash_win.cpp
+++ compiler-rt/lib/ubsan/ubsan_type_hash_win.cpp
@@ -12,7 +12,7 @@
 
 #include "sanitizer_common/sanitizer_platform.h"
 #include "ubsan_platform.h"
-#if CAN_SANITIZE_UB && SANITIZER_WINDOWS
+#if CAN_SANITIZE_UB && SANITIZER_WINDOWS && !defined(__MINGW32__)
 #include "ubsan_type_hash.h"
 
 #include "sanitizer_common/sanitizer_common.h"
Index: compiler-rt/lib/ubsan/ubsan_type_hash_itanium.cpp
===
--- compiler-rt/lib/ubsan/ubsan_type_hash_itanium.cpp
+++ compiler-rt/lib/ubsan/ubsan_type_hash_itanium.cpp
@@ -12,7 +12,7 @@
 
 #include "sanitizer_common/sanitizer_platform.h"
 #include "ubsan_platform.h"
-#if CAN_SANITIZE_UB && !SANITIZER_WINDOWS
+#if CAN_SANITIZE_UB && (!SANITIZER_WINDOWS || defined(__MINGW32__))
 #include "ubsan_type_hash.h"
 
 #include "sanitizer_common/sanitizer_common.h"


Index: compiler-rt/lib/ubsan/ubsan_type_hash_win.cpp
===
--- compiler-rt/lib/ubsan/ubsan_type_hash_win.cpp
+++ compiler-rt/lib/ubsan/ubsan_type_hash_win.cpp
@@ -12,7 +12,7 @@
 
 #include "sanitizer_common/sanitizer_platform.h"
 #include "ubsan_platform.h"
-#if CAN_SANITIZE_UB && SANITIZER_WINDOWS
+#if CAN_SANITIZE_UB && SANITIZER_WINDOWS && !defined(__MINGW32__)
 #include "ubsan_type_hash.h"
 
 #include "sanitizer_common/sanitizer_common.h"
Index: compiler-rt/lib/ubsan/ubsan_type_hash_itanium.cpp
===
--- compiler-rt/lib/ubsan/ubsan_type_hash_itanium.cpp
+++ compiler-rt/lib/ubsan/ubsan_type_hash_itanium.cpp
@@ -12,7 +12,7 @@
 
 #include "sanitizer_common/sanitizer_platform.h"
 #include "ubsan_platform.h"
-#if CAN_SANITIZE_UB && !SANITIZER_WINDOWS
+#if CAN_SANITIZE_UB && (!SANITIZER_WINDOWS || defined(__MINGW32__))
 #include "ubsan_type_hash.h"
 
 #include "sanitizer_common/sanitizer_common.h"
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D90572: [clang] [MinGW] Allow using the vptr sanitizer

2020-11-01 Thread Martin Storsjö via Phabricator via cfe-commits
mstorsjo created this revision.
mstorsjo added a reviewer: rnk.
Herald added a project: clang.
mstorsjo requested review of this revision.

Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D90572

Files:
  clang/lib/Driver/ToolChains/MinGW.cpp
  clang/test/Driver/mingw-sanitizers.c


Index: clang/test/Driver/mingw-sanitizers.c
===
--- clang/test/Driver/mingw-sanitizers.c
+++ clang/test/Driver/mingw-sanitizers.c
@@ -9,3 +9,5 @@
 // ASAN-X86_64: "{{[^"]*}}libclang_rt.asan_dynamic_runtime_thunk-x86_64.a"
 // ASAN-X86_64: "--require-defined" "__asan_seh_interceptor"
 // ASAN-X86_64: "--whole-archive" 
"{{.*}}libclang_rt.asan_dynamic_runtime_thunk-x86_64.a" "--no-whole-archive"
+
+// RUN: %clang -target x86_64-windows-gnu %s -### -fsanitize=vptr
Index: clang/lib/Driver/ToolChains/MinGW.cpp
===
--- clang/lib/Driver/ToolChains/MinGW.cpp
+++ clang/lib/Driver/ToolChains/MinGW.cpp
@@ -491,6 +491,7 @@
   Res |= SanitizerKind::Address;
   Res |= SanitizerKind::PointerCompare;
   Res |= SanitizerKind::PointerSubtract;
+  Res |= SanitizerKind::Vptr;
   return Res;
 }
 


Index: clang/test/Driver/mingw-sanitizers.c
===
--- clang/test/Driver/mingw-sanitizers.c
+++ clang/test/Driver/mingw-sanitizers.c
@@ -9,3 +9,5 @@
 // ASAN-X86_64: "{{[^"]*}}libclang_rt.asan_dynamic_runtime_thunk-x86_64.a"
 // ASAN-X86_64: "--require-defined" "__asan_seh_interceptor"
 // ASAN-X86_64: "--whole-archive" "{{.*}}libclang_rt.asan_dynamic_runtime_thunk-x86_64.a" "--no-whole-archive"
+
+// RUN: %clang -target x86_64-windows-gnu %s -### -fsanitize=vptr
Index: clang/lib/Driver/ToolChains/MinGW.cpp
===
--- clang/lib/Driver/ToolChains/MinGW.cpp
+++ clang/lib/Driver/ToolChains/MinGW.cpp
@@ -491,6 +491,7 @@
   Res |= SanitizerKind::Address;
   Res |= SanitizerKind::PointerCompare;
   Res |= SanitizerKind::PointerSubtract;
+  Res |= SanitizerKind::Vptr;
   return Res;
 }
 
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D90447: [AMDGPU] Add gfx1033 target

2020-11-01 Thread Tim Renouf via Phabricator via cfe-commits
tpr added inline comments.



Comment at: llvm/docs/AMDGPUUsage.rst:317
+   
  names.
+ ``gfx1033`` ``amdgcn``   dGPU  - wavefrontsize64  
   *TBA*
+  [off]

t-tye wrote:
> t-tye wrote:
> > APU
> This still needs fixing.
It now says APU in the diff I'm looking at. Is there something else that needs 
changing?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D90447/new/

https://reviews.llvm.org/D90447

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D90447: [AMDGPU] Add gfx1033 target

2020-11-01 Thread Tony Tye via Phabricator via cfe-commits
t-tye accepted this revision.
t-tye added a comment.
This revision is now accepted and ready to land.

LGTM provided the other files are updated as other reviews have mentioned.




Comment at: llvm/docs/AMDGPUUsage.rst:317
+   
  names.
+ ``gfx1033`` ``amdgcn``   dGPU  - wavefrontsize64  
   *TBA*
+  [off]

tpr wrote:
> t-tye wrote:
> > t-tye wrote:
> > > APU
> > This still needs fixing.
> It now says APU in the diff I'm looking at. Is there something else that 
> needs changing?
I see it now. Thanks.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D90447/new/

https://reviews.llvm.org/D90447

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D88393: [cfe][M68k] (Patch 7/8) Basic Clang support

2020-11-01 Thread Min-Yih Hsu via Phabricator via cfe-commits
myhsu updated this revision to Diff 302187.
myhsu retitled this revision from "[cfe][M68K] (Patch 7/8) Basic Clang support" 
to "[cfe][M68k] (Patch 7/8) Basic Clang support".
myhsu edited the summary of this revision.
myhsu added a comment.
Herald added a subscriber: dexonsmith.

[NFC] Rename M680x0 to M68k


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D88393/new/

https://reviews.llvm.org/D88393

Files:
  clang/include/clang/Basic/Attr.td
  clang/lib/Basic/CMakeLists.txt
  clang/lib/Basic/Targets.cpp
  clang/lib/Basic/Targets/M68k.cpp
  clang/lib/Basic/Targets/M68k.h
  clang/lib/CodeGen/TargetInfo.cpp
  clang/lib/Sema/SemaDeclAttr.cpp

Index: clang/lib/Sema/SemaDeclAttr.cpp
===
--- clang/lib/Sema/SemaDeclAttr.cpp
+++ clang/lib/Sema/SemaDeclAttr.cpp
@@ -5797,6 +5797,39 @@
   D->addAttr(::new (S.Context) MipsInterruptAttr(S.Context, AL, Kind));
 }
 
+static void handleM68kInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {
+  if (!checkAttributeNumArgs(S, AL, 1))
+return;
+
+  if (!AL.isArgExpr(0)) {
+S.Diag(AL.getLoc(), diag::err_attribute_argument_type)
+<< AL << AANT_ArgumentIntegerConstant;
+return;
+  }
+
+  // FIXME: Check for decl - it should be void ()(void).
+
+  Expr *NumParamsExpr = static_cast(AL.getArgAsExpr(0));
+  auto MaybeNumParams = NumParamsExpr->getIntegerConstantExpr(S.Context);
+  if (!MaybeNumParams) {
+S.Diag(AL.getLoc(), diag::err_attribute_argument_type)
+<< AL << AANT_ArgumentIntegerConstant
+<< NumParamsExpr->getSourceRange();
+return;
+  }
+
+  unsigned Num = MaybeNumParams->getLimitedValue(255);
+  if ((Num & 1) || Num > 30) {
+S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_bounds)
+<< AL << (int)MaybeNumParams->getSExtValue()
+<< NumParamsExpr->getSourceRange();
+return;
+  }
+
+  D->addAttr(::new (S.Context) M68kInterruptAttr(S.Context, AL, Num));
+  D->addAttr(UsedAttr::CreateImplicit(S.Context));
+}
+
 static void handleAnyX86InterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {
   // Semantic checks for a function with the 'interrupt' attribute.
   // a) Must be a function.
@@ -6069,6 +6102,9 @@
   case llvm::Triple::mips:
 handleMipsInterruptAttr(S, D, AL);
 break;
+  case llvm::Triple::m68k:
+handleM68kInterruptAttr(S, D, AL);
+break;
   case llvm::Triple::x86:
   case llvm::Triple::x86_64:
 handleAnyX86InterruptAttr(S, D, AL);
Index: clang/lib/CodeGen/TargetInfo.cpp
===
--- clang/lib/CodeGen/TargetInfo.cpp
+++ clang/lib/CodeGen/TargetInfo.cpp
@@ -8064,6 +8064,45 @@
   return false;
 }
 
+//===--===//
+// M68k ABI Implementation
+//===--===//
+
+namespace {
+
+class M68kTargetCodeGenInfo : public TargetCodeGenInfo {
+public:
+  M68kTargetCodeGenInfo(CodeGenTypes &CGT)
+  : TargetCodeGenInfo(std::make_unique(CGT)) {}
+  void setTargetAttributes(const Decl *D, llvm::GlobalValue *GV,
+   CodeGen::CodeGenModule &M) const override;
+};
+
+} // namespace
+
+// TODO Does not actually work right now
+void M68kTargetCodeGenInfo::setTargetAttributes(
+const Decl *D, llvm::GlobalValue *GV, CodeGen::CodeGenModule &M) const {
+  if (const FunctionDecl *FD = dyn_cast_or_null(D)) {
+if (const M68kInterruptAttr *attr = FD->getAttr()) {
+  // Handle 'interrupt' attribute:
+  llvm::Function *F = cast(GV);
+
+  // Step 1: Set ISR calling convention.
+  F->setCallingConv(llvm::CallingConv::M68k_INTR);
+
+  // Step 2: Add attributes goodness.
+  F->addFnAttr(llvm::Attribute::NoInline);
+
+  // ??? is this right
+  // Step 3: Emit ISR vector alias.
+  unsigned Num = attr->getNumber() / 2;
+  llvm::GlobalAlias::create(llvm::Function::ExternalLinkage,
+"__isr_" + Twine(Num), F);
+}
+  }
+}
+
 //===--===//
 // AVR ABI Implementation.
 //===--===//
Index: clang/lib/Basic/Targets/M68k.h
===
--- /dev/null
+++ clang/lib/Basic/Targets/M68k.h
@@ -0,0 +1,57 @@
+//===--- M68k.h - Declare M68k target feature support ---*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===--===//
+//
+// This file declares M68k TargetInfo objects.
+//
+//===--===//
+
+#ifndef M680X0_H_LTNCIPAD
+#define M680X0_H_LTNCIPAD
+
+#include 

[PATCH] D88394: [Driver][M68k] (Patch 8/8) Add driver support for M68k

2020-11-01 Thread Min-Yih Hsu via Phabricator via cfe-commits
myhsu updated this revision to Diff 302188.
myhsu retitled this revision from "[Driver][M68K] (Patch 8/8) Add driver 
support for M68K" to "[Driver][M68k] (Patch 8/8) Add driver support for M68k".
myhsu edited the summary of this revision.
myhsu added a comment.

[NFC] Rename M680x0 to M68k


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D88394/new/

https://reviews.llvm.org/D88394

Files:
  clang/include/clang/Driver/Options.td
  clang/lib/Driver/CMakeLists.txt
  clang/lib/Driver/ToolChains/Arch/M68k.cpp
  clang/lib/Driver/ToolChains/Arch/M68k.h
  clang/lib/Driver/ToolChains/Clang.cpp
  clang/lib/Driver/ToolChains/CommonArgs.cpp
  clang/lib/Driver/ToolChains/Gnu.cpp
  clang/lib/Driver/ToolChains/Linux.cpp
  clang/test/Driver/m68k-features.cpp
  clang/test/Driver/m68k-sub-archs.cpp

Index: clang/test/Driver/m68k-sub-archs.cpp
===
--- /dev/null
+++ clang/test/Driver/m68k-sub-archs.cpp
@@ -0,0 +1,29 @@
+// RUN: %clang -### -target m68k-unknown-linux -mcpu=68000 %s 2>&1 | FileCheck --check-prefix=CHECK-MX00 %s
+// RUN: %clang -### -target m68k-unknown-linux -mcpu=m68000 %s 2>&1 | FileCheck --check-prefix=CHECK-MX00 %s
+// RUN: %clang -### -target m68k-unknown-linux -mcpu=M68000 %s 2>&1 | FileCheck --check-prefix=CHECK-MX00 %s
+// RUN: %clang -### -target m68k-unknown-linux -m68000 %s 2>&1 | FileCheck --check-prefix=CHECK-MX00 %s
+// CHECK-MX00: "-target-cpu" "M68000"
+
+// RUN: %clang -### -target m68k-unknown-linux -mcpu=68010 %s 2>&1 | FileCheck --check-prefix=CHECK-MX10 %s
+// RUN: %clang -### -target m68k-unknown-linux -mcpu=m68010 %s 2>&1 | FileCheck --check-prefix=CHECK-MX10 %s
+// RUN: %clang -### -target m68k-unknown-linux -mcpu=M68010 %s 2>&1 | FileCheck --check-prefix=CHECK-MX10 %s
+// RUN: %clang -### -target m68k-unknown-linux -m68010 %s 2>&1 | FileCheck --check-prefix=CHECK-MX10 %s
+// CHECK-MX10: "-target-cpu" "M68010"
+
+// RUN: %clang -### -target m68k-unknown-linux -mcpu=68020 %s 2>&1 | FileCheck --check-prefix=CHECK-MX20 %s
+// RUN: %clang -### -target m68k-unknown-linux -mcpu=m68020 %s 2>&1 | FileCheck --check-prefix=CHECK-MX20 %s
+// RUN: %clang -### -target m68k-unknown-linux -mcpu=M68020 %s 2>&1 | FileCheck --check-prefix=CHECK-MX20 %s
+// RUN: %clang -### -target m68k-unknown-linux -m68020 %s 2>&1 | FileCheck --check-prefix=CHECK-MX20 %s
+// CHECK-MX20: "-target-cpu" "M68020"
+
+// RUN: %clang -### -target m68k-unknown-linux -mcpu=68030 %s 2>&1 | FileCheck --check-prefix=CHECK-MX30 %s
+// RUN: %clang -### -target m68k-unknown-linux -mcpu=m68030 %s 2>&1 | FileCheck --check-prefix=CHECK-MX30 %s
+// RUN: %clang -### -target m68k-unknown-linux -mcpu=M68030 %s 2>&1 | FileCheck --check-prefix=CHECK-MX30 %s
+// RUN: %clang -### -target m68k-unknown-linux -m68030 %s 2>&1 | FileCheck --check-prefix=CHECK-MX30 %s
+// CHECK-MX30: "-target-cpu" "M68030"
+
+// RUN: %clang -### -target m68k-unknown-linux -mcpu=68040 %s 2>&1 | FileCheck --check-prefix=CHECK-MX40 %s
+// RUN: %clang -### -target m68k-unknown-linux -mcpu=m68040 %s 2>&1 | FileCheck --check-prefix=CHECK-MX40 %s
+// RUN: %clang -### -target m68k-unknown-linux -mcpu=M68040 %s 2>&1 | FileCheck --check-prefix=CHECK-MX40 %s
+// RUN: %clang -### -target m68k-unknown-linux -m68040 %s 2>&1 | FileCheck --check-prefix=CHECK-MX40 %s
+// CHECK-MX40: "-target-cpu" "M68040"
Index: clang/test/Driver/m68k-features.cpp
===
--- /dev/null
+++ clang/test/Driver/m68k-features.cpp
@@ -0,0 +1,37 @@
+// Check macro definitions
+// RUN: %clang -target m68k-unknown-linux -m68000 -dM -E %s | FileCheck --check-prefix=CHECK-MX %s
+// CHECK-MX: #define __mc68000 1
+// CHECK-MX: #define __mc68000__ 1
+// CHECK-MX: #define mc68000 1
+
+// RUN: %clang -target m68k-unknown-linux -m68010 -dM -E %s | FileCheck --check-prefix=CHECK-MX10 %s
+// CHECK-MX10: #define __mc68000 1
+// CHECK-MX10: #define __mc68000__ 1
+// CHECK-MX10: #define __mc68010 1
+// CHECK-MX10: #define __mc68010__ 1
+// CHECK-MX10: #define mc68000 1
+// CHECK-MX10: #define mc68010 1
+
+// RUN: %clang -target m68k-unknown-linux -m68020 -dM -E %s | FileCheck --check-prefix=CHECK-MX20 %s
+// CHECK-MX20: #define __mc68000 1
+// CHECK-MX20: #define __mc68000__ 1
+// CHECK-MX20: #define __mc68020 1
+// CHECK-MX20: #define __mc68020__ 1
+// CHECK-MX20: #define mc68000 1
+// CHECK-MX20: #define mc68020 1
+
+// RUN: %clang -target m68k-unknown-linux -m68030 -dM -E %s | FileCheck --check-prefix=CHECK-MX30 %s
+// CHECK-MX30: #define __mc68000 1
+// CHECK-MX30: #define __mc68000__ 1
+// CHECK-MX30: #define __mc68030 1
+// CHECK-MX30: #define __mc68030__ 1
+// CHECK-MX30: #define mc68000 1
+// CHECK-MX30: #define mc68030 1
+
+// RUN: %clang -target m68k-unknown-linux -m68040 -dM -E %s | FileCheck --check-prefix=CHECK-MX40 %s
+// CHECK-MX40: #define __mc68000 1
+// CHECK-MX40: #define __mc68000__ 1
+// CHECK-MX40: #define __mc68040 1
+// CHECK-MX40: #define __mc68040__ 1
+// CHECK-MX40: #

[PATCH] D86671: [clang-tidy] Add new case type to check variables with Hungarian notation

2020-11-01 Thread Douglas Chen via Phabricator via cfe-commits
dougpuob added inline comments.



Comment at: 
clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp:441-456
+static IdentifierNamingCheck::HungarianPrefixOption
+parseHungarianPrefix(std::string OptionVal) {
+  for (auto &C : OptionVal)
+C = toupper(C);
+
+  if (std::string::npos != OptionVal.find("LOWER_CASE"))
+return IdentifierNamingCheck::HungarianPrefixOption::HPO_LowerCase;

njames93 wrote:
> This isn't really needed if you have the mapping defined, `Options.get` works 
> with enums, just look at how CaseType is parsed and stored. If you want to 
> map multiple strings to a single enum constant that can also work by putting 
> both strings in the mapping.
> This method also validates inputs and will print out an error if a user 
> supplies a value that can't be converted.
Good idea. Thank you.



Comment at: 
clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp:460
 getNamingStyles(const ClangTidyCheck::OptionsView &Options) {
+  static IdentifierNamingCheck::HungarianNotationOption HNOption;
+  HNOption.clearAll();

njames93 wrote:
> This function can be called multiple times per translation unit when looking 
> through header files if `GetConfigPerFile` is enabled. Making this static 
> will mean that each file thats read could potentially alter other files style 
> configuration.
> Maybe a smarter way about this is rather than this function returning a 
> vector of naming styles, it returns a struct which contains the Hungarian 
> options and a vector of the styles. Doing this would probably also mean you 
> don't need to store a reference to this in the `NamingStyle`.
I removed the static variable from the function and a reference in 
`NamingStyle`.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D86671/new/

https://reviews.llvm.org/D86671

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D90555: [clangd] Handle duplicate enum constants in PopulateSwitch tweak

2020-11-01 Thread Nathan James via Phabricator via cfe-commits
njames93 updated this revision to Diff 302191.
njames93 added a comment.
Herald added subscribers: llvm-commits, dexonsmith.
Herald added a project: LLVM.

Fix bug where prepare would return true erroneously when enum contains 
duplicated constants


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D90555/new/

https://reviews.llvm.org/D90555

Files:
  clang-tools-extra/clangd/refactor/tweaks/PopulateSwitch.cpp
  clang-tools-extra/clangd/unittests/TweakTests.cpp
  llvm/include/llvm/ADT/DenseMapInfo.h

Index: llvm/include/llvm/ADT/DenseMapInfo.h
===
--- llvm/include/llvm/ADT/DenseMapInfo.h
+++ llvm/include/llvm/ADT/DenseMapInfo.h
@@ -14,6 +14,7 @@
 #define LLVM_ADT_DENSEMAPINFO_H
 
 #include "llvm/ADT/APInt.h"
+#include "llvm/ADT/APSInt.h"
 #include "llvm/ADT/ArrayRef.h"
 #include "llvm/ADT/Hashing.h"
 #include "llvm/ADT/StringRef.h"
@@ -371,6 +372,26 @@
   }
 };
 
+/// Provide DenseMapInfo for APSInt, using the DenseMapInfo for APInt.
+template <> struct DenseMapInfo {
+  static inline APSInt getEmptyKey() {
+return APSInt(DenseMapInfo::getEmptyKey());
+  }
+
+  static inline APSInt getTombstoneKey() {
+return APSInt(DenseMapInfo::getTombstoneKey());
+  }
+
+  static unsigned getHashValue(const APSInt &Key) {
+return static_cast(hash_value(Key));
+  }
+
+  static bool isEqual(const APSInt &LHS, const APSInt &RHS) {
+return LHS.getBitWidth() == RHS.getBitWidth() &&
+   LHS.isUnsigned() == RHS.isUnsigned() && LHS == RHS;
+  }
+};
+
 } // end namespace llvm
 
 #endif // LLVM_ADT_DENSEMAPINFO_H
Index: clang-tools-extra/clangd/unittests/TweakTests.cpp
===
--- clang-tools-extra/clangd/unittests/TweakTests.cpp
+++ clang-tools-extra/clangd/unittests/TweakTests.cpp
@@ -2980,6 +2980,18 @@
 void function() { switch (ns::A) {case ns::A:break;} }
   )"",
   },
+  {
+  // Duplicated constant names
+  Function,
+  R""(enum Enum {A,B,b=B}; ^switch (A) {})"",
+  R""(enum Enum {A,B,b=B}; switch (A) {case A:case B:break;})"",
+  },
+  {
+  // Duplicated constant names all in switch
+  Function,
+  R""(enum Enum {A,B,b=B}; ^switch (A) {case A:case B:break;})"",
+  "unavailable",
+  },
   };
 
   for (const auto &Case : Cases) {
Index: clang-tools-extra/clangd/refactor/tweaks/PopulateSwitch.cpp
===
--- clang-tools-extra/clangd/refactor/tweaks/PopulateSwitch.cpp
+++ clang-tools-extra/clangd/refactor/tweaks/PopulateSwitch.cpp
@@ -40,6 +40,8 @@
 #include "clang/Basic/SourceLocation.h"
 #include "clang/Basic/SourceManager.h"
 #include "clang/Tooling/Core/Replacement.h"
+#include "llvm/ADT/MapVector.h"
+#include "llvm/ADT/STLExtras.h"
 #include "llvm/ADT/SmallSet.h"
 #include 
 #include 
@@ -112,15 +114,25 @@
   if (!EnumD)
 return false;
 
-  // We trigger if there are fewer cases than enum values (and no case covers
-  // multiple values). This guarantees we'll have at least one case to insert.
-  // We don't yet determine what the cases are, as that means evaluating
-  // expressions.
-  auto I = EnumD->enumerator_begin();
-  auto E = EnumD->enumerator_end();
+  // Special case of the empty enum
+  if (EnumD->enumerator_begin() == EnumD->enumerator_end())
+return false;
+
+  ASTContext &Ctx = Sel.AST->getASTContext();
+
+  unsigned EnumIntWidth = Ctx.getIntWidth(QualType(EnumT, 0));
+  bool EnumIsSigned = EnumT->isSignedIntegerOrEnumerationType();
+
+  llvm::SmallMapVector EnumConstants;
+  for (auto *EnumConstant : EnumD->enumerators()) {
+llvm::APSInt Val = EnumConstant->getInitVal();
+Val = Val.extOrTrunc(EnumIntWidth);
+Val.setIsSigned(EnumIsSigned);
+EnumConstants.insert(std::make_pair(Val, false));
+  }
 
-  for (const SwitchCase *CaseList = Switch->getSwitchCaseList();
-   CaseList && I != E; CaseList = CaseList->getNextSwitchCase(), I++) {
+  for (const SwitchCase *CaseList = Switch->getSwitchCaseList(); CaseList;
+   CaseList = CaseList->getNextSwitchCase()) {
 // Default likely intends to cover cases we'd insert.
 if (isa(CaseList))
   return false;
@@ -135,10 +147,20 @@
 const ConstantExpr *CE = dyn_cast(CS->getLHS());
 if (!CE || CE->isValueDependent())
   return false;
+
+if (CE->getResultStorageKind() != ConstantExpr::RSK_Int64)
+  return false;
+llvm::APSInt Val = CE->getResultAsAPSInt();
+Val = Val.extOrTrunc(EnumIntWidth);
+Val.setIsSigned(EnumIsSigned);
+auto *Iter = EnumConstants.find(Val);
+if (Iter == EnumConstants.end())
+  return false;
+Iter->second = true;
+continue;
   }
 
-  // Only suggest tweak if we have more enumerators than cases.
-  return I != E;
+  return !llvm::all_of(EnumConstants, [](auto &Pair) { return Pair.second; });
 }
 
 Expected Popul

[clang] 0949f96 - [MemProf] Pass down memory profile name with optional path from clang

2020-11-01 Thread Teresa Johnson via cfe-commits

Author: Teresa Johnson
Date: 2020-11-01T17:38:23-08:00
New Revision: 0949f96dc6521be80ebb8ebc1e1c506165c22aac

URL: 
https://github.com/llvm/llvm-project/commit/0949f96dc6521be80ebb8ebc1e1c506165c22aac
DIFF: 
https://github.com/llvm/llvm-project/commit/0949f96dc6521be80ebb8ebc1e1c506165c22aac.diff

LOG: [MemProf] Pass down memory profile name with optional path from clang

Similar to -fprofile-generate=, add -fmemory-profile= which takes a
directory path. This is passed down to LLVM via a new module flag
metadata. LLVM in turn provides this name to the runtime via the new
__memprof_profile_filename variable.

Additionally, always pass a default filename (in $cwd if a directory
name is not specified vi the = form of the option). This is also
consistent with the behavior of the PGO instrumentation. Since the
memory profiles will generally be fairly large, it doesn't make sense to
dump them to stderr. Also, importantly, the memory profiles will
eventually be dumped in a compact binary format, which is another reason
why it does not make sense to send these to stderr by default.

Change the existing memprof tests to specify log_path=stderr when that
was being relied on.

Depends on D89086.

Differential Revision: https://reviews.llvm.org/D89087

Added: 
clang/test/CodeGen/memory-profile-filename.c
llvm/test/Instrumentation/HeapProfiler/filename.ll

Modified: 
clang/include/clang/Basic/CodeGenOptions.def
clang/include/clang/Basic/CodeGenOptions.h
clang/include/clang/Driver/Options.td
clang/lib/CodeGen/BackendUtil.cpp
clang/lib/CodeGen/CodeGenModule.cpp
clang/lib/Driver/SanitizerArgs.cpp
clang/lib/Driver/ToolChains/Clang.cpp
clang/lib/Frontend/CompilerInvocation.cpp
clang/test/Driver/fmemprof.cpp
compiler-rt/test/memprof/TestCases/atexit_stats.cpp
compiler-rt/test/memprof/TestCases/dump_process_map.cpp
compiler-rt/test/memprof/TestCases/log_path_test.cpp
compiler-rt/test/memprof/TestCases/malloc-size-too-big.cpp
compiler-rt/test/memprof/TestCases/mem_info_cache_entries.cpp
compiler-rt/test/memprof/TestCases/print_miss_rate.cpp
compiler-rt/test/memprof/TestCases/stress_dtls.c
compiler-rt/test/memprof/TestCases/test_malloc_load_store.c
compiler-rt/test/memprof/TestCases/test_memintrin.cpp
compiler-rt/test/memprof/TestCases/test_new_load_store.cpp
compiler-rt/test/memprof/TestCases/test_terse.cpp
compiler-rt/test/memprof/TestCases/unaligned_loads_and_stores.cpp
llvm/lib/Transforms/Instrumentation/MemProfiler.cpp

Removed: 




diff  --git a/clang/include/clang/Basic/CodeGenOptions.def 
b/clang/include/clang/Basic/CodeGenOptions.def
index f5222b50fc7b..7cd80aa806db 100644
--- a/clang/include/clang/Basic/CodeGenOptions.def
+++ b/clang/include/clang/Basic/CodeGenOptions.def
@@ -151,7 +151,6 @@ CODEGENOPT(IncrementalLinkerCompatible, 1, 0) ///< Emit an 
object file which can
   ///< linker.
 CODEGENOPT(MergeAllConstants , 1, 1) ///< Merge identical constants.
 CODEGENOPT(MergeFunctions, 1, 0) ///< Set when -fmerge-functions is 
enabled.
-CODEGENOPT(MemProf   , 1, 0) ///< Set when -fmemory-profile is enabled.
 CODEGENOPT(MSVolatile, 1, 0) ///< Set when /volatile:ms is enabled.
 CODEGENOPT(NoCommon  , 1, 0) ///< Set when -fno-common or C++ is 
enabled.
 CODEGENOPT(NoDwarfDirectoryAsm , 1, 0) ///< Set when -fno-dwarf-directory-asm 
is

diff  --git a/clang/include/clang/Basic/CodeGenOptions.h 
b/clang/include/clang/Basic/CodeGenOptions.h
index 764d0a17cb72..6452d2bb25f6 100644
--- a/clang/include/clang/Basic/CodeGenOptions.h
+++ b/clang/include/clang/Basic/CodeGenOptions.h
@@ -231,6 +231,9 @@ class CodeGenOptions : public CodeGenOptionsBase {
   /// Name of the profile file to use with -fprofile-sample-use.
   std::string SampleProfileFile;
 
+  /// Name of the profile file to use as output for with -fmemory-profile.
+  std::string MemoryProfileOutput;
+
   /// Name of the profile file to use as input for -fprofile-instr-use
   std::string ProfileInstrumentUsePath;
 

diff  --git a/clang/include/clang/Driver/Options.td 
b/clang/include/clang/Driver/Options.td
index 0f7440896cb4..165baf06cbb2 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -1017,6 +1017,9 @@ def fsymbol_partition_EQ : Joined<["-"], 
"fsymbol-partition=">, Group,
   Flags<[CC1Option]>;
 
 defm memory_profile : OptInFFlag<"memory-profile", "Enable", "Disable", " heap 
memory profiling">;
+def fmemory_profile_EQ : Joined<["-"], "fmemory-profile=">,
+Group, Flags<[CC1Option]>, MetaVarName<"">,
+HelpText<"Enable heap memory profiling and dump results into ">;
 
 // Begin sanitizer flags. These should all be core options exposed in all 
driver
 // modes.

diff  --git a/clang/lib/CodeGen/BackendUtil.cpp 
b/clang/lib/CodeGen/BackendUtil.cpp
index e693d6d05464.

[PATCH] D89087: [MemProf] Pass down memory profile name with optional path from clang

2020-11-01 Thread Teresa Johnson via Phabricator via cfe-commits
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG0949f96dc652: [MemProf] Pass down memory profile name with 
optional path from clang (authored by tejohnson).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D89087/new/

https://reviews.llvm.org/D89087

Files:
  clang/include/clang/Basic/CodeGenOptions.def
  clang/include/clang/Basic/CodeGenOptions.h
  clang/include/clang/Driver/Options.td
  clang/lib/CodeGen/BackendUtil.cpp
  clang/lib/CodeGen/CodeGenModule.cpp
  clang/lib/Driver/SanitizerArgs.cpp
  clang/lib/Driver/ToolChains/Clang.cpp
  clang/lib/Frontend/CompilerInvocation.cpp
  clang/test/CodeGen/memory-profile-filename.c
  clang/test/Driver/fmemprof.cpp
  compiler-rt/test/memprof/TestCases/atexit_stats.cpp
  compiler-rt/test/memprof/TestCases/dump_process_map.cpp
  compiler-rt/test/memprof/TestCases/log_path_test.cpp
  compiler-rt/test/memprof/TestCases/malloc-size-too-big.cpp
  compiler-rt/test/memprof/TestCases/mem_info_cache_entries.cpp
  compiler-rt/test/memprof/TestCases/print_miss_rate.cpp
  compiler-rt/test/memprof/TestCases/stress_dtls.c
  compiler-rt/test/memprof/TestCases/test_malloc_load_store.c
  compiler-rt/test/memprof/TestCases/test_memintrin.cpp
  compiler-rt/test/memprof/TestCases/test_new_load_store.cpp
  compiler-rt/test/memprof/TestCases/test_terse.cpp
  compiler-rt/test/memprof/TestCases/unaligned_loads_and_stores.cpp
  llvm/lib/Transforms/Instrumentation/MemProfiler.cpp
  llvm/test/Instrumentation/HeapProfiler/filename.ll

Index: llvm/test/Instrumentation/HeapProfiler/filename.ll
===
--- /dev/null
+++ llvm/test/Instrumentation/HeapProfiler/filename.ll
@@ -0,0 +1,15 @@
+; Test to ensure that the filename provided by clang in the module flags
+; metadata results in the expected __memprof_profile_filename insertion.
+
+; RUN: opt < %s -mtriple=x86_64-unknown-linux -memprof -memprof-module -S | FileCheck --check-prefixes=CHECK %s
+
+define i32 @main() {
+entry:
+  ret i32 0
+}
+
+!llvm.module.flags = !{!0}
+!0 = !{i32 1, !"MemProfProfileFilename", !"/tmp/memprof.profraw"}
+
+; CHECK: $__memprof_profile_filename = comdat any
+; CHECK: @__memprof_profile_filename = constant [21 x i8] c"/tmp/memprof.profraw\00", comdat
Index: llvm/lib/Transforms/Instrumentation/MemProfiler.cpp
===
--- llvm/lib/Transforms/Instrumentation/MemProfiler.cpp
+++ llvm/lib/Transforms/Instrumentation/MemProfiler.cpp
@@ -60,6 +60,8 @@
 constexpr char MemProfShadowMemoryDynamicAddress[] =
 "__memprof_shadow_memory_dynamic_address";
 
+constexpr char MemProfFilenameVar[] = "__memprof_profile_filename";
+
 // Command-line flags.
 
 static cl::opt ClInsertVersionCheck(
@@ -486,6 +488,26 @@
   IRB.CreateStore(ShadowValue, ShadowAddr);
 }
 
+// Create the variable for the profile file name.
+void createProfileFileNameVar(Module &M) {
+  const MDString *MemProfFilename =
+  dyn_cast_or_null(M.getModuleFlag("MemProfProfileFilename"));
+  if (!MemProfFilename)
+return;
+  assert(!MemProfFilename->getString().empty() &&
+ "Unexpected MemProfProfileFilename metadata with empty string");
+  Constant *ProfileNameConst = ConstantDataArray::getString(
+  M.getContext(), MemProfFilename->getString(), true);
+  GlobalVariable *ProfileNameVar = new GlobalVariable(
+  M, ProfileNameConst->getType(), /*isConstant=*/true,
+  GlobalValue::WeakAnyLinkage, ProfileNameConst, MemProfFilenameVar);
+  Triple TT(M.getTargetTriple());
+  if (TT.supportsCOMDAT()) {
+ProfileNameVar->setLinkage(GlobalValue::ExternalLinkage);
+ProfileNameVar->setComdat(M.getOrInsertComdat(MemProfFilenameVar));
+  }
+}
+
 bool ModuleMemProfiler::instrumentModule(Module &M) {
   // Create a module constructor.
   std::string MemProfVersion = std::to_string(LLVM_MEM_PROFILER_VERSION);
@@ -500,6 +522,8 @@
   const uint64_t Priority = getCtorAndDtorPriority(TargetTriple);
   appendToGlobalCtors(M, MemProfCtorFunction, Priority);
 
+  createProfileFileNameVar(M);
+
   return true;
 }
 
Index: compiler-rt/test/memprof/TestCases/unaligned_loads_and_stores.cpp
===
--- compiler-rt/test/memprof/TestCases/unaligned_loads_and_stores.cpp
+++ compiler-rt/test/memprof/TestCases/unaligned_loads_and_stores.cpp
@@ -1,4 +1,4 @@
-// RUN: %clangxx_memprof -O0 %s -o %t && %run %t 2>&1 | FileCheck %s
+// RUN: %clangxx_memprof -O0 %s -o %t && %env_memprof_opts=log_path=stderr %run %t 2>&1 | FileCheck %s
 
 // This is actually:
 //  Memory allocation stack id = STACKID
Index: compiler-rt/test/memprof/TestCases/test_terse.cpp
===
--- compiler-rt/test/memprof/TestCases/test_terse.cpp
+++ compiler-rt/test/memprof/TestCases/test_terse.cpp
@@ -3,10 +3,10 @@
 //

[PATCH] D86671: [clang-tidy] Add new case type to check variables with Hungarian notation

2020-11-01 Thread Nathan James via Phabricator via cfe-commits
njames93 added inline comments.



Comment at: 
clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp:130
 m(ObjcIvar) \
+m(HungarianNotation) \
 

Is this line needed?



Comment at: 
clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp:241
+  // Options
+  const static llvm::StringMap Options = {
+  {"TreatStructAsClass", "false"}};

As you never use map like access for this, shouldn't it be an array.
The same goes for all the other StringMaps in this function



Comment at: 
clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp:366
+IdentifierNamingCheck::HungarianNotationOption &HNOption) {
+  std::string Section = "HungarianNotation.";
+





Comment at: 
clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp:368
+
+  std::vector HNOpts = {"TreatStructAsClass"};
+  for (auto const &Opt : HNOpts) {

However for this I can see that its mapping the same options as `Options` in 
`getHungarianNotationDefaultConfig()`.
Maybe `HNOpts` should be removed from here, `Option` from 
`getHungarianNotationDefaultConfig()` taken out of function scope and iterate 
over that array below. 

A similar approach could be made with HNDerviedTypes



Comment at: 
clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp:369-370
+  std::vector HNOpts = {"TreatStructAsClass"};
+  for (auto const &Opt : HNOpts) {
+std::string Key = Section + "General." + Opt;
+std::string Val = Options.get(Key, "");

Building these temporary strings is expensive. Better off having a SmallString 
contsructed outside the loop and fill the string for each iteration, saved on 
allocations.
The same buffer can be reused below for the other loops



Comment at: 
clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp:424
+static bool
+isHungarianNotationOptionEnabled(const std::string OptionKey,
+ llvm::StringMap StrMap) {





Comment at: 
clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp:718
+
+const static std::list Keywords = {
+// Constexpr specifiers




Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D86671/new/

https://reviews.llvm.org/D86671

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D17993: [CodeGen] Apply 'nonnull' to 'this' pointer arguments.

2020-11-01 Thread Richard Smith - zygoloid via Phabricator via cfe-commits
rsmith added a comment.

Thanks! We should also have a test for the behavior when targeting the MS ABI, 
where we sometimes don't emit the `nonnull dereferenceable` because the 
"`this`" pointer might actually point outside the object, but otherwise I think 
this is ready to go.

Please can you also put together a patch for the release notes? This seems 
worth mentioning there.




Comment at: clang/test/CodeGenCXX/this-nonnull.cpp:1-2
+// RUN: %clang -S -emit-llvm -o - -fdelete-null-pointer-checks %s | FileCheck 
%s -check-prefix=CHECK-YES
+// RUN: %clang -S -emit-llvm -o - -fno-delete-null-pointer-checks %s | 
FileCheck %s -check-prefix=CHECK-NO
+

This test needs a `-triple` or it will fail on (at least) non-Itanium hosts.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D17993/new/

https://reviews.llvm.org/D17993

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D90208: [PowerPC] [Clang] Define macros to identify quad-fp semantics

2020-11-01 Thread Qing Shan Zhang via Phabricator via cfe-commits
steven.zhang accepted this revision.
steven.zhang added inline comments.
This revision is now accepted and ready to land.



Comment at: clang/lib/Basic/Targets/PPC.cpp:122
   if (LongDoubleWidth == 128) {
 Builder.defineMacro("__LONG_DOUBLE_128__");
 Builder.defineMacro("__LONGDOUBLE128");

Can you please double check if we need to define these two macros if PPC IEEE 
long double enabled ? And also double check if they can be controlled by 
options.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D90208/new/

https://reviews.llvm.org/D90208

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D90208: [PowerPC] [Clang] Define macros to identify quad-fp semantics

2020-11-01 Thread Qing Shan Zhang via Phabricator via cfe-commits
steven.zhang added a comment.

Sorry, accept the revision by mistake. Please hold on until my comments 
addressed.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D90208/new/

https://reviews.llvm.org/D90208

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] 95824be - [MemProf] Fix test failure on windows

2020-11-01 Thread Teresa Johnson via cfe-commits

Author: Teresa Johnson
Date: 2020-11-01T19:06:50-08:00
New Revision: 95824be18fcd70a90787fecd1e51ca0c67d8bd20

URL: 
https://github.com/llvm/llvm-project/commit/95824be18fcd70a90787fecd1e51ca0c67d8bd20
DIFF: 
https://github.com/llvm/llvm-project/commit/95824be18fcd70a90787fecd1e51ca0c67d8bd20.diff

LOG: [MemProf] Fix test failure on windows

Fix failure in new test from 0949f96dc6521be80ebb8ebc1e1c506165c22aac:
Don't match exact file path separator.

Should fix:
http://lab.llvm.org:8011/#/builders/119/builds/437/steps/9/logs/FAIL__Clang__memory-profile-filename_c

Added: 


Modified: 
clang/test/CodeGen/memory-profile-filename.c

Removed: 




diff  --git a/clang/test/CodeGen/memory-profile-filename.c 
b/clang/test/CodeGen/memory-profile-filename.c
index 0041aca1cd7a..89ce90991d3c 100644
--- a/clang/test/CodeGen/memory-profile-filename.c
+++ b/clang/test/CodeGen/memory-profile-filename.c
@@ -9,4 +9,4 @@ int main(void) {
 
 // NONE-NOT: MemProfProfileFilename
 // DEFAULTNAME: !{i32 1, !"MemProfProfileFilename", !"memprof.profraw"}
-// CUSTOMNAME: !{i32 1, !"MemProfProfileFilename", !"/tmp/memprof.profraw"}
+// CUSTOMNAME: !{i32 1, !"MemProfProfileFilename", 
!"/tmp{{.*}}memprof.profraw"}



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] 6d15a28 - [clangd] Fix ParsedASTTest.TopLevelDecls test.

2020-11-01 Thread Haojian Wu via cfe-commits

Author: Ilya Golovenko
Date: 2020-11-02T08:37:04+01:00
New Revision: 6d15a28a853d5eb453d58324141c9ec75d55c2da

URL: 
https://github.com/llvm/llvm-project/commit/6d15a28a853d5eb453d58324141c9ec75d55c2da
DIFF: 
https://github.com/llvm/llvm-project/commit/6d15a28a853d5eb453d58324141c9ec75d55c2da.diff

LOG: [clangd] Fix ParsedASTTest.TopLevelDecls test.

Google test matcher `DeclKind` uses `NamedDecl::getDeclKindName()` to compare 
its result with expected declaration name.
Both, returned value of this function and the expected kind name argument have 
type `const char *`, so this matcher effectively
compares two pointers instead of the respective strings.

The test was passing on most platforms because compilers mostly were able to 
coalesce these string literals.

Patch By: Ilya Golovenko

Reviewed By: hokein

Differential Revision: https://reviews.llvm.org/D90384

Added: 


Modified: 
clang-tools-extra/clangd/unittests/ParsedASTTests.cpp

Removed: 




diff  --git a/clang-tools-extra/clangd/unittests/ParsedASTTests.cpp 
b/clang-tools-extra/clangd/unittests/ParsedASTTests.cpp
index 9b7b2e2dcd47..3fd7ded2b356 100644
--- a/clang-tools-extra/clangd/unittests/ParsedASTTests.cpp
+++ b/clang-tools-extra/clangd/unittests/ParsedASTTests.cpp
@@ -59,7 +59,7 @@ MATCHER_P(DeclNamed, Name, "") {
 
 MATCHER_P(DeclKind, Kind, "") {
   if (NamedDecl *ND = dyn_cast(arg))
-if (ND->getDeclKindName() == Kind)
+if (ND->getDeclKindName() == llvm::StringRef(Kind))
   return true;
   if (auto *Stream = result_listener->stream()) {
 llvm::raw_os_ostream OS(*Stream);
@@ -104,8 +104,7 @@ MATCHER(EqInc, "") {
  std::tie(Expected.HashLine, Expected.Written);
 }
 
-// FIXME: figure out why it fails on clang-ppc64le-rhel buildbot.
-TEST(ParsedASTTest, DISABLED_TopLevelDecls) {
+TEST(ParsedASTTest, TopLevelDecls) {
   TestTU TU;
   TU.HeaderCode = R"(
 int header1();



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D90384: [clangd] Fix ParsedASTTest.TopLevelDecls test.

2020-11-01 Thread Haojian Wu via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rG6d15a28a853d: [clangd] Fix ParsedASTTest.TopLevelDecls test. 
(authored by ilya-golovenko, committed by hokein).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D90384/new/

https://reviews.llvm.org/D90384

Files:
  clang-tools-extra/clangd/unittests/ParsedASTTests.cpp


Index: clang-tools-extra/clangd/unittests/ParsedASTTests.cpp
===
--- clang-tools-extra/clangd/unittests/ParsedASTTests.cpp
+++ clang-tools-extra/clangd/unittests/ParsedASTTests.cpp
@@ -59,7 +59,7 @@
 
 MATCHER_P(DeclKind, Kind, "") {
   if (NamedDecl *ND = dyn_cast(arg))
-if (ND->getDeclKindName() == Kind)
+if (ND->getDeclKindName() == llvm::StringRef(Kind))
   return true;
   if (auto *Stream = result_listener->stream()) {
 llvm::raw_os_ostream OS(*Stream);
@@ -104,8 +104,7 @@
  std::tie(Expected.HashLine, Expected.Written);
 }
 
-// FIXME: figure out why it fails on clang-ppc64le-rhel buildbot.
-TEST(ParsedASTTest, DISABLED_TopLevelDecls) {
+TEST(ParsedASTTest, TopLevelDecls) {
   TestTU TU;
   TU.HeaderCode = R"(
 int header1();


Index: clang-tools-extra/clangd/unittests/ParsedASTTests.cpp
===
--- clang-tools-extra/clangd/unittests/ParsedASTTests.cpp
+++ clang-tools-extra/clangd/unittests/ParsedASTTests.cpp
@@ -59,7 +59,7 @@
 
 MATCHER_P(DeclKind, Kind, "") {
   if (NamedDecl *ND = dyn_cast(arg))
-if (ND->getDeclKindName() == Kind)
+if (ND->getDeclKindName() == llvm::StringRef(Kind))
   return true;
   if (auto *Stream = result_listener->stream()) {
 llvm::raw_os_ostream OS(*Stream);
@@ -104,8 +104,7 @@
  std::tie(Expected.HashLine, Expected.Written);
 }
 
-// FIXME: figure out why it fails on clang-ppc64le-rhel buildbot.
-TEST(ParsedASTTest, DISABLED_TopLevelDecls) {
+TEST(ParsedASTTest, TopLevelDecls) {
   TestTU TU;
   TU.HeaderCode = R"(
 int header1();
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D90291: [clangd] Add lit tests for remote index

2020-11-01 Thread Kirill Bobyrev via Phabricator via cfe-commits
kbobyrev updated this revision to Diff 302213.
kbobyrev marked 6 inline comments as done.
kbobyrev added a comment.

Resolve post-LGTM commentts, increase index hot reload frequency.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D90291/new/

https://reviews.llvm.org/D90291

Files:
  clang-tools-extra/clangd/index/remote/server/Server.cpp
  clang-tools-extra/clangd/test/CMakeLists.txt
  clang-tools-extra/clangd/test/lit.cfg.py
  clang-tools-extra/clangd/test/lit.site.cfg.py.in
  clang-tools-extra/clangd/test/remote-index/Inputs/Header.h
  clang-tools-extra/clangd/test/remote-index/Inputs/Source.cpp
  clang-tools-extra/clangd/test/remote-index/pipeline.test
  clang-tools-extra/clangd/test/remote-index/pipeline_helper.py

Index: clang-tools-extra/clangd/test/remote-index/pipeline_helper.py
===
--- /dev/null
+++ clang-tools-extra/clangd/test/remote-index/pipeline_helper.py
@@ -0,0 +1,63 @@
+#!/usr/bin/env python
+#
+#===- pipeline_helper.py - Remote Index pipeline Helper *- python ---*--===#
+#
+# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+# See https://llvm.org/LICENSE.txt for license information.
+# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+#
+#======#
+
+import argparse
+import os
+import subprocess
+from socket import socket
+import sys
+import time
+import signal
+
+
+def main():
+  parser = argparse.ArgumentParser()
+  parser.add_argument('--input-file-name', required=True)
+  parser.add_argument('--project-root', required=True)
+  parser.add_argument('--index-file', required=True)
+
+  args = parser.parse_args()
+
+  # Grab an available port.
+  with socket() as s:
+s.bind(('localhost', 0))
+server_address = 'localhost:' + str(s.getsockname()[1])
+
+  index_server_process = subprocess.Popen([
+  'clangd-index-server', '--server-address=' + server_address,
+  args.index_file, args.project_root
+  ],
+  stderr=subprocess.PIPE)
+
+  # Wait for the server to warm-up.
+  time.sleep(4)
+  found_init_message = False
+  for line in index_server_process.stderr:
+if b'Server listening' in line:
+  found_init_message = True
+  break
+
+  if not found_init_message:
+sys.exit(1)
+
+  in_file = open(args.input_file_name)
+
+  clangd_process = subprocess.Popen([
+  'clangd', '--remote-index-address=' + server_address,
+  '--project-root=' + args.project_root, '--lit-test', '--sync'
+  ],
+stdin=in_file)
+
+  clangd_process.wait()
+  os.kill(index_server_process.pid, signal.SIGINT)
+
+
+if __name__ == '__main__':
+  main()
Index: clang-tools-extra/clangd/test/remote-index/pipeline.test
===
--- /dev/null
+++ clang-tools-extra/clangd/test/remote-index/pipeline.test
@@ -0,0 +1,39 @@
+# RUN: rm -rf %t
+# RUN: clangd-indexer %S/Inputs/Source.cpp > %t.idx
+# RUN: %python %S/pipeline_helper.py --input-file-name=%s --project-root=%S --index-file=%t.idx | FileCheck %s
+# REQUIRES: clangd-remote-index
+
+{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{},"trace":"off"}}
+#  CHECK:  "id": 0,
+# CHECK-NEXT:  "jsonrpc": "2.0",
+---
+{"jsonrpc":"2.0","id":1,"method":"workspace/symbol","params":{"query":"Character"}}
+#  CHECK:  "id": 1,
+# CHECK-NEXT:  "jsonrpc": "2.0",
+# CHECK-NEXT:"result": [
+# CHECK-NEXT:  {
+# CHECK-NEXT:"containerName": "clang::clangd::remote",
+# CHECK-NEXT:"kind": 13,
+# CHECK-NEXT:"location": {
+# CHECK-NEXT:  "range": {
+# CHECK-NEXT:"end": {
+# CHECK-NEXT:  "character": {{.*}},
+# CHECK-NEXT:  "line": {{.*}}
+# CHECK-NEXT:},
+# CHECK-NEXT:"start": {
+# CHECK-NEXT:  "character": {{.*}},
+# CHECK-NEXT:  "line": {{.*}}
+# CHECK-NEXT:}
+# CHECK-NEXT:  },
+# CHECK-NEXT:  "uri": "file://{{.*}}/Header.h"
+# CHECK-NEXT:},
+# CHECK-NEXT:"name": "Character",
+# CHECK-NEXT:"score": {{.*}}
+# CHECK-NEXT:  }
+# CHECK-NEXT:]
+# CHECK-NEXT:}
+---
+{"jsonrpc":"2.0","id":4,"method":"shutdown"}
+---
+{"jsonrpc":"2.0","method":"exit"}
+---
Index: clang-tools-extra/clangd/test/remote-index/Inputs/Source.cpp
===
--- /dev/null
+++ clang-tools-extra/clangd/test/remote-index/Inputs/Source.cpp
@@ -0,0 +1,3 @@
+#include "Header.h"
+
+namespace {} // namespace
Index: clang-tools-extra/clangd/test/remote-index/Inputs/Header.h
===
--- /dev/null
+++ clang-tools-extra/clangd/test/remote-index/Inputs/Header.h
@@ -0,0 +1,10 @@
+namespace clang {
+namespa

[PATCH] D90110: [clang-tidy] Use --use-color in run-clang-tidy.py

2020-11-01 Thread David Sanders via Phabricator via cfe-commits
dsanders11 added a comment.

No one has raised any concerns, so if someone with commit access wants to 
commit this on my behalf it would be appreciated.. Thanks!


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D90110/new/

https://reviews.llvm.org/D90110

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D90291: [clangd] Add lit tests for remote index

2020-11-01 Thread Kirill Bobyrev via Phabricator via cfe-commits
kbobyrev added inline comments.



Comment at: clang-tools-extra/clangd/test/remote-index/pipeline_helper.py:36
+  ],
+  stderr=subprocess.PIPE)
+

kadircet wrote:
> nit: formatting looks off, is this really what yapf offers?
Yep, I'm formatting with it :(



Comment at: clang-tools-extra/clangd/test/remote-index/pipeline_helper.py:39
+  # Wait for the server to warm-up.
+  if not b'Server listening' in index_server_process.stderr.readline():
+sys.exit(1)

kadircet wrote:
> i would rather scan through all lines and look for `Server listening on 
> $server_addres`. We should be able to either hit the end of stream (i.e. 
> server encounters a failure and shuts down) or find the log message we are 
> looking for.
> 
> just to make test less reliant on log ordering.
Unfortunately, it's not as easy :( Then I would have to set a time to wait for 
the server to warm up and read lines then only. The problem here is that the 
server runs, doesn't shut down but also doesn't print the message. We'll hang 
the buildbots then.

But I'll go with the timeout option. I don't think it's better than checking 
the first line as the initialize one but still.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D90291/new/

https://reviews.llvm.org/D90291

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] 76a168b - [clangd] Add lit tests for remote index

2020-11-01 Thread Kirill Bobyrev via cfe-commits

Author: Kirill Bobyrev
Date: 2020-11-02T08:38:16+01:00
New Revision: 76a168bce01dd950852bc86effd6f379ecf78f82

URL: 
https://github.com/llvm/llvm-project/commit/76a168bce01dd950852bc86effd6f379ecf78f82
DIFF: 
https://github.com/llvm/llvm-project/commit/76a168bce01dd950852bc86effd6f379ecf78f82.diff

LOG: [clangd] Add lit tests for remote index

Reviewed By: kadircet

Differential Revision: https://reviews.llvm.org/D90291

Added: 
clang-tools-extra/clangd/test/remote-index/Inputs/Header.h
clang-tools-extra/clangd/test/remote-index/Inputs/Source.cpp
clang-tools-extra/clangd/test/remote-index/pipeline.test
clang-tools-extra/clangd/test/remote-index/pipeline_helper.py

Modified: 
clang-tools-extra/clangd/index/remote/server/Server.cpp
clang-tools-extra/clangd/test/CMakeLists.txt
clang-tools-extra/clangd/test/lit.cfg.py
clang-tools-extra/clangd/test/lit.site.cfg.py.in

Removed: 




diff  --git a/clang-tools-extra/clangd/index/remote/server/Server.cpp 
b/clang-tools-extra/clangd/index/remote/server/Server.cpp
index 38bb754e17cf..33000b1aad15 100644
--- a/clang-tools-extra/clangd/index/remote/server/Server.cpp
+++ b/clang-tools-extra/clangd/index/remote/server/Server.cpp
@@ -330,7 +330,7 @@ int main(int argc, char *argv[]) {
 
   std::thread HotReloadThread([&Index, &Status, &FS]() {
 llvm::vfs::Status LastStatus = *Status;
-static constexpr auto RefreshFrequency = std::chrono::seconds(90);
+static constexpr auto RefreshFrequency = std::chrono::seconds(30);
 while (!clang::clangd::shutdownRequested()) {
   hotReload(*Index, llvm::StringRef(IndexPath), LastStatus, FS);
   std::this_thread::sleep_for(RefreshFrequency);

diff  --git a/clang-tools-extra/clangd/test/CMakeLists.txt 
b/clang-tools-extra/clangd/test/CMakeLists.txt
index ade42ac457e0..4c983c5569e1 100644
--- a/clang-tools-extra/clangd/test/CMakeLists.txt
+++ b/clang-tools-extra/clangd/test/CMakeLists.txt
@@ -11,8 +11,8 @@ string(REPLACE ${CMAKE_CFG_INTDIR} ${LLVM_BUILD_MODE} 
CLANG_TOOLS_DIR ${LLVM_RUN
 set(CLANGD_TEST_DEPS
   clangd
   ClangdTests
-  # No tests for these, but we should still make sure they build.
   clangd-indexer
+  # No tests for it, but we should still make sure they build.
   dexp
   )
 

diff  --git a/clang-tools-extra/clangd/test/lit.cfg.py 
b/clang-tools-extra/clangd/test/lit.cfg.py
index 93e4463450e5..a085f6a58dac 100644
--- a/clang-tools-extra/clangd/test/lit.cfg.py
+++ b/clang-tools-extra/clangd/test/lit.cfg.py
@@ -2,6 +2,7 @@
 
 lit.llvm.initialize(lit_config, config)
 lit.llvm.llvm_config.use_clang()
+lit.llvm.llvm_config.use_default_substitutions()
 
 config.name = 'Clangd'
 config.suffixes = ['.test']
@@ -26,3 +27,6 @@ def calculate_arch_features(arch_string):
 
 if config.clangd_build_xpc:
   config.available_features.add('clangd-xpc-support')
+
+if config.clangd_enable_remote:
+  config.available_features.add('clangd-remote-index')

diff  --git a/clang-tools-extra/clangd/test/lit.site.cfg.py.in 
b/clang-tools-extra/clangd/test/lit.site.cfg.py.in
index 0a8301f37cf1..750e5c500f6f 100644
--- a/clang-tools-extra/clangd/test/lit.site.cfg.py.in
+++ b/clang-tools-extra/clangd/test/lit.site.cfg.py.in
@@ -8,6 +8,7 @@ config.clang_libs_dir = "@CLANG_LIBS_DIR@"
 config.llvm_libs_dir = "@LLVM_LIBS_DIR@"
 config.target_triple = "@TARGET_TRIPLE@"
 config.host_triple = "@LLVM_HOST_TRIPLE@"
+config.python_executable = "@Python3_EXECUTABLE@"
 
 # Support substitution of the tools and libs dirs with user parameters. This is
 # used when we can't determine the tool dir at configuration time.
@@ -23,6 +24,7 @@ except KeyError:
 config.clangd_source_dir = "@CMAKE_CURRENT_SOURCE_DIR@/.."
 config.clangd_binary_dir = "@CMAKE_CURRENT_BINARY_DIR@/.."
 config.clangd_build_xpc = @CLANGD_BUILD_XPC@
+config.clangd_enable_remote = @CLANGD_ENABLE_REMOTE@
 
 # Delegate logic to lit.cfg.py.
 lit_config.load_config(config, "@CMAKE_CURRENT_SOURCE_DIR@/lit.cfg.py")

diff  --git a/clang-tools-extra/clangd/test/remote-index/Inputs/Header.h 
b/clang-tools-extra/clangd/test/remote-index/Inputs/Header.h
new file mode 100644
index ..75fb6c8f1a40
--- /dev/null
+++ b/clang-tools-extra/clangd/test/remote-index/Inputs/Header.h
@@ -0,0 +1,10 @@
+namespace clang {
+namespace clangd {
+namespace remote {
+int getFoo(bool Argument);
+char Character;
+} // namespace remote
+} // namespace clangd
+} // namespace clang
+
+namespace llvm {} // namespace llvm

diff  --git a/clang-tools-extra/clangd/test/remote-index/Inputs/Source.cpp 
b/clang-tools-extra/clangd/test/remote-index/Inputs/Source.cpp
new file mode 100644
index ..b2a3554903f8
--- /dev/null
+++ b/clang-tools-extra/clangd/test/remote-index/Inputs/Source.cpp
@@ -0,0 +1,3 @@
+#include "Header.h"
+
+namespace {} // namespace

diff  --git a/clang-tools-extra/clangd/test/remote-index/pipeline.test 
b/clang-tools-extra/clangd/test/remote-index/pipeline.test
new

[PATCH] D90291: [clangd] Add lit tests for remote index

2020-11-01 Thread Kirill Bobyrev via Phabricator via cfe-commits
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG76a168bce01d: [clangd] Add lit tests for remote index 
(authored by kbobyrev).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D90291/new/

https://reviews.llvm.org/D90291

Files:
  clang-tools-extra/clangd/index/remote/server/Server.cpp
  clang-tools-extra/clangd/test/CMakeLists.txt
  clang-tools-extra/clangd/test/lit.cfg.py
  clang-tools-extra/clangd/test/lit.site.cfg.py.in
  clang-tools-extra/clangd/test/remote-index/Inputs/Header.h
  clang-tools-extra/clangd/test/remote-index/Inputs/Source.cpp
  clang-tools-extra/clangd/test/remote-index/pipeline.test
  clang-tools-extra/clangd/test/remote-index/pipeline_helper.py

Index: clang-tools-extra/clangd/test/remote-index/pipeline_helper.py
===
--- /dev/null
+++ clang-tools-extra/clangd/test/remote-index/pipeline_helper.py
@@ -0,0 +1,63 @@
+#!/usr/bin/env python
+#
+#===- pipeline_helper.py - Remote Index pipeline Helper *- python ---*--===#
+#
+# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+# See https://llvm.org/LICENSE.txt for license information.
+# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+#
+#======#
+
+import argparse
+import os
+import subprocess
+from socket import socket
+import sys
+import time
+import signal
+
+
+def main():
+  parser = argparse.ArgumentParser()
+  parser.add_argument('--input-file-name', required=True)
+  parser.add_argument('--project-root', required=True)
+  parser.add_argument('--index-file', required=True)
+
+  args = parser.parse_args()
+
+  # Grab an available port.
+  with socket() as s:
+s.bind(('localhost', 0))
+server_address = 'localhost:' + str(s.getsockname()[1])
+
+  index_server_process = subprocess.Popen([
+  'clangd-index-server', '--server-address=' + server_address,
+  args.index_file, args.project_root
+  ],
+  stderr=subprocess.PIPE)
+
+  # Wait for the server to warm-up.
+  time.sleep(4)
+  found_init_message = False
+  for line in index_server_process.stderr:
+if b'Server listening' in line:
+  found_init_message = True
+  break
+
+  if not found_init_message:
+sys.exit(1)
+
+  in_file = open(args.input_file_name)
+
+  clangd_process = subprocess.Popen([
+  'clangd', '--remote-index-address=' + server_address,
+  '--project-root=' + args.project_root, '--lit-test', '--sync'
+  ],
+stdin=in_file)
+
+  clangd_process.wait()
+  os.kill(index_server_process.pid, signal.SIGINT)
+
+
+if __name__ == '__main__':
+  main()
Index: clang-tools-extra/clangd/test/remote-index/pipeline.test
===
--- /dev/null
+++ clang-tools-extra/clangd/test/remote-index/pipeline.test
@@ -0,0 +1,39 @@
+# RUN: rm -rf %t
+# RUN: clangd-indexer %S/Inputs/Source.cpp > %t.idx
+# RUN: %python %S/pipeline_helper.py --input-file-name=%s --project-root=%S --index-file=%t.idx | FileCheck %s
+# REQUIRES: clangd-remote-index
+
+{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{},"trace":"off"}}
+#  CHECK:  "id": 0,
+# CHECK-NEXT:  "jsonrpc": "2.0",
+---
+{"jsonrpc":"2.0","id":1,"method":"workspace/symbol","params":{"query":"Character"}}
+#  CHECK:  "id": 1,
+# CHECK-NEXT:  "jsonrpc": "2.0",
+# CHECK-NEXT:"result": [
+# CHECK-NEXT:  {
+# CHECK-NEXT:"containerName": "clang::clangd::remote",
+# CHECK-NEXT:"kind": 13,
+# CHECK-NEXT:"location": {
+# CHECK-NEXT:  "range": {
+# CHECK-NEXT:"end": {
+# CHECK-NEXT:  "character": {{.*}},
+# CHECK-NEXT:  "line": {{.*}}
+# CHECK-NEXT:},
+# CHECK-NEXT:"start": {
+# CHECK-NEXT:  "character": {{.*}},
+# CHECK-NEXT:  "line": {{.*}}
+# CHECK-NEXT:}
+# CHECK-NEXT:  },
+# CHECK-NEXT:  "uri": "file://{{.*}}/Header.h"
+# CHECK-NEXT:},
+# CHECK-NEXT:"name": "Character",
+# CHECK-NEXT:"score": {{.*}}
+# CHECK-NEXT:  }
+# CHECK-NEXT:]
+# CHECK-NEXT:}
+---
+{"jsonrpc":"2.0","id":4,"method":"shutdown"}
+---
+{"jsonrpc":"2.0","method":"exit"}
+---
Index: clang-tools-extra/clangd/test/remote-index/Inputs/Source.cpp
===
--- /dev/null
+++ clang-tools-extra/clangd/test/remote-index/Inputs/Source.cpp
@@ -0,0 +1,3 @@
+#include "Header.h"
+
+namespace {} // namespace
Index: clang-tools-extra/clangd/test/remote-index/Inputs/Header.h
===
--- /dev/null
+++ clang-tools-extra/clangd/test/remote-index/Inputs/Header.h

[PATCH] D90291: [clangd] Add lit tests for remote index

2020-11-01 Thread Kirill Bobyrev via Phabricator via cfe-commits
kbobyrev added inline comments.



Comment at: clang-tools-extra/clangd/test/remote-index/pipeline_helper.py:51
+  clangd_process.wait()
+  os.kill(index_server_process.pid, 9)
+

kadircet wrote:
> can we rather use `signal.SIGXXX` here instead of `9` ?
> 
> Also rather than kill, SIGINT might be more applicable. 
> https://docs.python.org/3/library/signal.html#signal.SIGKILL claims sigkill 
> is not available on windows.
The problem with `SIGINT` is that it needs to wait for the hot reload sync to 
finish :) I'll add a patch to modify the frequency via CLI to avoid long test 
terminaiton.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D90291/new/

https://reviews.llvm.org/D90291

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D90587: [clangd] Control the delay between index hot reloading in remote-server-index

2020-11-01 Thread Kirill Bobyrev via Phabricator via cfe-commits
kbobyrev created this revision.
kbobyrev added a reviewer: kadircet.
Herald added subscribers: cfe-commits, usaxena95, arphaman.
Herald added a project: clang.
kbobyrev requested review of this revision.
Herald added subscribers: MaskRay, ilya-biryukov.

This helps reduce the time needed for remote-server-index shutdown.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D90587

Files:
  clang-tools-extra/clangd/index/remote/server/Server.cpp
  clang-tools-extra/clangd/test/remote-index/pipeline_helper.py


Index: clang-tools-extra/clangd/test/remote-index/pipeline_helper.py
===
--- clang-tools-extra/clangd/test/remote-index/pipeline_helper.py
+++ clang-tools-extra/clangd/test/remote-index/pipeline_helper.py
@@ -32,7 +32,7 @@
 
   index_server_process = subprocess.Popen([
   'clangd-index-server', '--server-address=' + server_address,
-  args.index_file, args.project_root
+  '--hot-reload-frequency=3', args.index_file, args.project_root
   ],
   stderr=subprocess.PIPE)
 
Index: clang-tools-extra/clangd/index/remote/server/Server.cpp
===
--- clang-tools-extra/clangd/index/remote/server/Server.cpp
+++ clang-tools-extra/clangd/index/remote/server/Server.cpp
@@ -72,6 +72,13 @@
 "server-address", llvm::cl::init("0.0.0.0:50051"),
 llvm::cl::desc("Address of the invoked server. Defaults to 
0.0.0.0:50051"));
 
+llvm::cl::opt HotReloadFrequency{
+"hot-reload-frequency",
+llvm::cl::desc("Delay between index hot reload checks (in seconds)"),
+llvm::cl::init(90),
+llvm::cl::Hidden,
+};
+
 class RemoteIndexServer final : public v1::SymbolIndex::Service {
 public:
   RemoteIndexServer(clangd::SymbolIndex &Index, llvm::StringRef IndexRoot)
@@ -328,9 +335,9 @@
 return -1;
   }
 
-  std::thread HotReloadThread([&Index, &Status, &FS]() {
+  const auto RefreshFrequency = std::chrono::seconds(HotReloadFrequency);
+  std::thread HotReloadThread([&Index, &Status, &FS, &RefreshFrequency]() {
 llvm::vfs::Status LastStatus = *Status;
-static constexpr auto RefreshFrequency = std::chrono::seconds(30);
 while (!clang::clangd::shutdownRequested()) {
   hotReload(*Index, llvm::StringRef(IndexPath), LastStatus, FS);
   std::this_thread::sleep_for(RefreshFrequency);


Index: clang-tools-extra/clangd/test/remote-index/pipeline_helper.py
===
--- clang-tools-extra/clangd/test/remote-index/pipeline_helper.py
+++ clang-tools-extra/clangd/test/remote-index/pipeline_helper.py
@@ -32,7 +32,7 @@
 
   index_server_process = subprocess.Popen([
   'clangd-index-server', '--server-address=' + server_address,
-  args.index_file, args.project_root
+  '--hot-reload-frequency=3', args.index_file, args.project_root
   ],
   stderr=subprocess.PIPE)
 
Index: clang-tools-extra/clangd/index/remote/server/Server.cpp
===
--- clang-tools-extra/clangd/index/remote/server/Server.cpp
+++ clang-tools-extra/clangd/index/remote/server/Server.cpp
@@ -72,6 +72,13 @@
 "server-address", llvm::cl::init("0.0.0.0:50051"),
 llvm::cl::desc("Address of the invoked server. Defaults to 0.0.0.0:50051"));
 
+llvm::cl::opt HotReloadFrequency{
+"hot-reload-frequency",
+llvm::cl::desc("Delay between index hot reload checks (in seconds)"),
+llvm::cl::init(90),
+llvm::cl::Hidden,
+};
+
 class RemoteIndexServer final : public v1::SymbolIndex::Service {
 public:
   RemoteIndexServer(clangd::SymbolIndex &Index, llvm::StringRef IndexRoot)
@@ -328,9 +335,9 @@
 return -1;
   }
 
-  std::thread HotReloadThread([&Index, &Status, &FS]() {
+  const auto RefreshFrequency = std::chrono::seconds(HotReloadFrequency);
+  std::thread HotReloadThread([&Index, &Status, &FS, &RefreshFrequency]() {
 llvm::vfs::Status LastStatus = *Status;
-static constexpr auto RefreshFrequency = std::chrono::seconds(30);
 while (!clang::clangd::shutdownRequested()) {
   hotReload(*Index, llvm::StringRef(IndexPath), LastStatus, FS);
   std::this_thread::sleep_for(RefreshFrequency);
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D90588: [clangd] NFC: Only pass ASTContext and TokenBuffer in getFoldingRanges API

2020-11-01 Thread Kirill Bobyrev via Phabricator via cfe-commits
kbobyrev created this revision.
kbobyrev added a reviewer: sammccall.
Herald added subscribers: cfe-commits, usaxena95, kadircet, arphaman.
Herald added a project: clang.
kbobyrev requested review of this revision.
Herald added subscribers: MaskRay, ilya-biryukov.

Follow-up on https://reviews.llvm.org/D88553#inline-837013


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D90588

Files:
  clang-tools-extra/clangd/ClangdServer.cpp
  clang-tools-extra/clangd/SemanticSelection.cpp
  clang-tools-extra/clangd/SemanticSelection.h
  clang-tools-extra/clangd/unittests/SemanticSelectionTests.cpp


Index: clang-tools-extra/clangd/unittests/SemanticSelectionTests.cpp
===
--- clang-tools-extra/clangd/unittests/SemanticSelectionTests.cpp
+++ clang-tools-extra/clangd/unittests/SemanticSelectionTests.cpp
@@ -263,7 +263,8 @@
   for (const char *Test : Tests) {
 auto T = Annotations(Test);
 auto AST = TestTU::withCode(T.code()).build();
-EXPECT_THAT(gatherFoldingRanges(llvm::cantFail(getFoldingRanges(AST))),
+EXPECT_THAT(gatherFoldingRanges(llvm::cantFail(
+getFoldingRanges(AST.getASTContext(), AST.getTokens(,
 UnorderedElementsAreArray(T.ranges()))
 << Test;
   }
Index: clang-tools-extra/clangd/SemanticSelection.h
===
--- clang-tools-extra/clangd/SemanticSelection.h
+++ clang-tools-extra/clangd/SemanticSelection.h
@@ -14,6 +14,7 @@
 #define LLVM_CLANG_TOOLS_EXTRA_CLANGD_SEMANTICSELECTION_H
 #include "ParsedAST.h"
 #include "Protocol.h"
+#include "clang/Tooling/Syntax/Tokens.h"
 #include "llvm/Support/Error.h"
 #include 
 namespace clang {
@@ -27,7 +28,8 @@
 
 /// Returns a list of ranges whose contents might be collapsible in an editor.
 /// This should include large scopes, preprocessor blocks etc.
-llvm::Expected> getFoldingRanges(ParsedAST &AST);
+llvm::Expected>
+getFoldingRanges(ASTContext &Context, const syntax::TokenBuffer &Tokens);
 
 } // namespace clangd
 } // namespace clang
Index: clang-tools-extra/clangd/SemanticSelection.cpp
===
--- clang-tools-extra/clangd/SemanticSelection.cpp
+++ clang-tools-extra/clangd/SemanticSelection.cpp
@@ -12,6 +12,7 @@
 #include "Protocol.h"
 #include "Selection.h"
 #include "SourceCode.h"
+#include "clang/AST/ASTContext.h"
 #include "clang/AST/DeclBase.h"
 #include "clang/Basic/SourceLocation.h"
 #include "clang/Basic/SourceManager.h"
@@ -158,11 +159,12 @@
 // other code regions (e.g. public/private/protected sections of classes,
 // control flow statement bodies).
 // Related issue: https://github.com/clangd/clangd/issues/310
-llvm::Expected> getFoldingRanges(ParsedAST &AST) {
-  syntax::Arena A(AST.getSourceManager(), AST.getLangOpts(), AST.getTokens());
+llvm::Expected>
+getFoldingRanges(ASTContext &Context, const syntax::TokenBuffer &Tokens) {
+  syntax::Arena A(Context.getSourceManager(), Context.getLangOpts(), Tokens);
   const auto *SyntaxTree =
-  syntax::buildSyntaxTree(A, 
*AST.getASTContext().getTranslationUnitDecl());
-  return collectFoldingRanges(SyntaxTree, AST.getSourceManager());
+  syntax::buildSyntaxTree(A, *Context.getTranslationUnitDecl());
+  return collectFoldingRanges(SyntaxTree, Context.getSourceManager());
 }
 
 } // namespace clangd
Index: clang-tools-extra/clangd/ClangdServer.cpp
===
--- clang-tools-extra/clangd/ClangdServer.cpp
+++ clang-tools-extra/clangd/ClangdServer.cpp
@@ -711,7 +711,8 @@
   [CB = std::move(CB)](llvm::Expected InpAST) mutable {
 if (!InpAST)
   return CB(InpAST.takeError());
-CB(clangd::getFoldingRanges(InpAST->AST));
+CB(clangd::getFoldingRanges(InpAST->AST.getASTContext(),
+InpAST->AST.getTokens()));
   };
   WorkScheduler.runWithAST("foldingRanges", File, std::move(Action),
TUScheduler::InvalidateOnUpdate);


Index: clang-tools-extra/clangd/unittests/SemanticSelectionTests.cpp
===
--- clang-tools-extra/clangd/unittests/SemanticSelectionTests.cpp
+++ clang-tools-extra/clangd/unittests/SemanticSelectionTests.cpp
@@ -263,7 +263,8 @@
   for (const char *Test : Tests) {
 auto T = Annotations(Test);
 auto AST = TestTU::withCode(T.code()).build();
-EXPECT_THAT(gatherFoldingRanges(llvm::cantFail(getFoldingRanges(AST))),
+EXPECT_THAT(gatherFoldingRanges(llvm::cantFail(
+getFoldingRanges(AST.getASTContext(), AST.getTokens(,
 UnorderedElementsAreArray(T.ranges()))
 << Test;
   }
Index: clang-tools-extra/clangd/SemanticSelection.h
===
--- clang-tools-extra/clangd/SemanticSelection.h
+++ clang-tools-extra/clangd/

[PATCH] D90291: [clangd] Add lit tests for remote index

2020-11-01 Thread Kadir Cetinkaya via Phabricator via cfe-commits
kadircet added inline comments.



Comment at: clang-tools-extra/clangd/test/remote-index/pipeline_helper.py:42
+  found_init_message = False
+  for line in index_server_process.stderr:
+if b'Server listening' in line:

so if we think `.readline()` is blocking but this is not, can't we just keep 
calling readline instead?



Comment at: clang-tools-extra/clangd/test/remote-index/pipeline_helper.py:39
+  # Wait for the server to warm-up.
+  if not b'Server listening' in index_server_process.stderr.readline():
+sys.exit(1)

kbobyrev wrote:
> kadircet wrote:
> > i would rather scan through all lines and look for `Server listening on 
> > $server_addres`. We should be able to either hit the end of stream (i.e. 
> > server encounters a failure and shuts down) or find the log message we are 
> > looking for.
> > 
> > just to make test less reliant on log ordering.
> Unfortunately, it's not as easy :( Then I would have to set a time to wait 
> for the server to warm up and read lines then only. The problem here is that 
> the server runs, doesn't shut down but also doesn't print the message. We'll 
> hang the buildbots then.
> 
> But I'll go with the timeout option. I don't think it's better than checking 
> the first line as the initialize one but still.
> Unfortunately, it's not as easy :( Then I would have to set a time to wait 
> for the server to warm up and read lines then only

Why? isn't the `readline()` on `stderr` blocking ? If not how was this code 
working without sleep before?

>  The problem here is that the server runs, doesn't shut down but also doesn't 
> print the message. We'll hang the buildbots then.

If the argument above is correct, this was the case already, i.e. 
stderr.readline() would block until a line is available or server had shutdown.

To overcome this problem I would suggest having a separate thread that would 
kill the server if it is still running after N seconds.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D90291/new/

https://reviews.llvm.org/D90291

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits