r253130 - [X86][MMX] Added MMX IR + assembly codegen builtin tests

2015-11-14 Thread Simon Pilgrim via cfe-commits
Author: rksimon
Date: Sat Nov 14 06:47:44 2015
New Revision: 253130

URL: http://llvm.org/viewvc/llvm-project?rev=253130&view=rev
Log:
[X86][MMX] Added MMX IR + assembly codegen builtin tests

Improved tests as discussed in PR24580

Modified:
cfe/trunk/test/CodeGen/mmx-builtins.c

Modified: cfe/trunk/test/CodeGen/mmx-builtins.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/mmx-builtins.c?rev=253130&r1=253129&r2=253130&view=diff
==
--- cfe/trunk/test/CodeGen/mmx-builtins.c (original)
+++ cfe/trunk/test/CodeGen/mmx-builtins.c Sat Nov 14 06:47:44 2015
@@ -1,464 +1,626 @@
 // REQUIRES: x86-registered-target
-// RUN: %clang_cc1 %s -triple=x86_64-apple-darwin -target-feature +ssse3 -S -o 
- | FileCheck %s
-// RUN: %clang_cc1 %s -triple=x86_64-apple-darwin -target-feature +ssse3 
-fno-signed-char -S -o - | FileCheck %s
+// RUN: %clang_cc1 %s -triple=x86_64-apple-darwin -target-feature +ssse3 
-emit-llvm -o - -Werror | FileCheck %s
+// RUN: %clang_cc1 %s -triple=x86_64-apple-darwin -target-feature +ssse3 
-fno-signed-char -emit-llvm -o - -Werror | FileCheck %s
+// RUN: %clang_cc1 %s -triple=x86_64-apple-darwin -target-feature +ssse3 -S -o 
- -Werror | FileCheck %s --check-prefix=CHECK-ASM
+// RUN: %clang_cc1 %s -triple=x86_64-apple-darwin -target-feature +ssse3 
-fno-signed-char -S -o - -Werror | FileCheck %s --check-prefix=CHECK-ASM
 
-// FIXME: Disable inclusion of mm_malloc.h, our current implementation is 
broken
-// on win32 since we don't generally know how to find errno.h.
+// Don't include mm_malloc.h, it's system specific.
 #define __MM_MALLOC_H
 
-#include 
+#include 
 
-__m64 test1(__m64 a, __m64 b) {
-  // CHECK: phaddw
+__m64 test_mm_hadd_pi16(__m64 a, __m64 b) {
+  // CHECK-LABEL: test_mm_hadd_pi16
+  // CHECK: call x86_mmx @llvm.x86.ssse3.phadd.w
+  // CHECK-ASM: phaddw %mm{{.*}}, %mm{{.*}}
   return _mm_hadd_pi16(a, b);
 }
 
-__m64 test2(__m64 a, __m64 b) {
-  // CHECK: phaddd
+__m64 test_mm_hadd_pi32(__m64 a, __m64 b) {
+  // CHECK-LABEL: test_mm_hadd_pi32
+  // CHECK: call x86_mmx @llvm.x86.ssse3.phadd.d
+  // CHECK-ASM: phaddd %mm{{.*}}, %mm{{.*}}
   return _mm_hadd_pi32(a, b);
 }
 
-__m64 test3(__m64 a, __m64 b) {
-  // CHECK: phaddsw
+__m64 test_mm_hadds_pi16(__m64 a, __m64 b) {
+  // CHECK-LABEL: test_mm_hadds_pi16
+  // CHECK: call x86_mmx @llvm.x86.ssse3.phadd.sw
+  // CHECK-ASM: phaddsw %mm{{.*}}, %mm{{.*}}
   return _mm_hadds_pi16(a, b);
 }
 
-__m64 test4(__m64 a, __m64 b) {
-  // CHECK: phsubw
+__m64 test_mm_hsub_pi16(__m64 a, __m64 b) {
+  // CHECK-LABEL: test_mm_hsub_pi16
+  // CHECK: call x86_mmx @llvm.x86.ssse3.phsub.w
+  // CHECK-ASM: phsubw %mm{{.*}}, %mm{{.*}}
   return _mm_hsub_pi16(a, b);
 }
 
-__m64 test5(__m64 a, __m64 b) {
-  // CHECK: phsubd
+__m64 test_mm_hsub_pi32(__m64 a, __m64 b) {
+  // CHECK-LABEL: test_mm_hsub_pi32
+  // CHECK: call x86_mmx @llvm.x86.ssse3.phsub.d
+  // CHECK-ASM: phsubd %mm{{.*}}, %mm{{.*}}
   return _mm_hsub_pi32(a, b);
 }
 
-__m64 test6(__m64 a, __m64 b) {
-  // CHECK: phsubsw
+__m64 test_mm_hsubs_pi16(__m64 a, __m64 b) {
+  // CHECK-LABEL: test_mm_hsubs_pi16
+  // CHECK: call x86_mmx @llvm.x86.ssse3.phsub.sw
+  // CHECK-ASM: phsubsw %mm{{.*}}, %mm{{.*}}
   return _mm_hsubs_pi16(a, b);
 }
 
-__m64 test7(__m64 a, __m64 b) {
-  // CHECK: pmaddubsw
+__m64 test_mm_maddubs_pi16(__m64 a, __m64 b) {
+  // CHECK-LABEL: test_mm_maddubs_pi16
+  // CHECK: call x86_mmx @llvm.x86.ssse3.pmadd.ub.sw
+  // CHECK-ASM: pmaddubsw %mm{{.*}}, %mm{{.*}}
   return _mm_maddubs_pi16(a, b);
 }
 
-__m64 test8(__m64 a, __m64 b) {
-  // CHECK: pmulhrsw
+__m64 test_mm_mulhrs_pi16(__m64 a, __m64 b) {
+  // CHECK-LABEL: test_mm_mulhrs_pi16
+  // CHECK: call x86_mmx @llvm.x86.ssse3.pmul.hr.sw
+  // CHECK-ASM: pmulhrsw %mm{{.*}}, %mm{{.*}}
   return _mm_mulhrs_pi16(a, b);
 }
 
-__m64 test9(__m64 a, __m64 b) {
-  // CHECK: pshufb
+__m64 test_mm_shuffle_pi8(__m64 a, __m64 b) {
+  // CHECK-LABEL: test_mm_shuffle_pi8
+  // CHECK: call x86_mmx @llvm.x86.ssse3.pshuf.b
+  // CHECK-ASM: pshufb %mm{{.*}}, %mm{{.*}}
   return _mm_shuffle_pi8(a, b);
 }
 
-__m64 test10(__m64 a, __m64 b) {
-  // CHECK: psignb
+__m64 test_mm_sign_pi8(__m64 a, __m64 b) {
+  // CHECK-LABEL: test_mm_sign_pi8
+  // CHECK: call x86_mmx @llvm.x86.ssse3.psign.b
+  // CHECK-ASM: psignb %mm{{.*}}, %mm{{.*}}
   return _mm_sign_pi8(a, b);
 }
 
-__m64 test11(__m64 a, __m64 b) {
-  // CHECK: psignw
+__m64 test_mm_sign_pi16(__m64 a, __m64 b) {
+  // CHECK-LABEL: test_mm_sign_pi16
+  // CHECK: call x86_mmx @llvm.x86.ssse3.psign.w
+  // CHECK-ASM: psignw %mm{{.*}}, %mm{{.*}}
   return _mm_sign_pi16(a, b);
 }
 
-__m64 test12(__m64 a, __m64 b) {
-  // CHECK: psignd
+__m64 test_mm_sign_pi32(__m64 a, __m64 b) {
+  // CHECK-LABEL: test_mm_sign_pi32
+  // CHECK: call x86_mmx @llvm.x86.ssse3.psign.d
+  // CHECK-ASM: psignd %mm{{.*}}, %mm{{.*}}
   return _mm_sign_pi32(a, b);
 }
 
-__m64 test13(__m64 a) {
-  // CHECK: pabsb
+__m64 test_mm_

r253131 - [X86][MMX] Sorted MMX IR + assembly codegen builtin tests

2015-11-14 Thread Simon Pilgrim via cfe-commits
Author: rksimon
Date: Sat Nov 14 07:25:06 2015
New Revision: 253131

URL: http://llvm.org/viewvc/llvm-project?rev=253131&view=rev
Log:
[X86][MMX] Sorted MMX IR + assembly codegen builtin tests

Makes it easier to track what tests are missing

Modified:
cfe/trunk/test/CodeGen/mmx-builtins.c

Modified: cfe/trunk/test/CodeGen/mmx-builtins.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/mmx-builtins.c?rev=253131&r1=253130&r2=253131&view=diff
==
--- cfe/trunk/test/CodeGen/mmx-builtins.c (original)
+++ cfe/trunk/test/CodeGen/mmx-builtins.c Sat Nov 14 07:25:06 2015
@@ -9,90 +9,6 @@
 
 #include 
 
-__m64 test_mm_hadd_pi16(__m64 a, __m64 b) {
-  // CHECK-LABEL: test_mm_hadd_pi16
-  // CHECK: call x86_mmx @llvm.x86.ssse3.phadd.w
-  // CHECK-ASM: phaddw %mm{{.*}}, %mm{{.*}}
-  return _mm_hadd_pi16(a, b);
-}
-
-__m64 test_mm_hadd_pi32(__m64 a, __m64 b) {
-  // CHECK-LABEL: test_mm_hadd_pi32
-  // CHECK: call x86_mmx @llvm.x86.ssse3.phadd.d
-  // CHECK-ASM: phaddd %mm{{.*}}, %mm{{.*}}
-  return _mm_hadd_pi32(a, b);
-}
-
-__m64 test_mm_hadds_pi16(__m64 a, __m64 b) {
-  // CHECK-LABEL: test_mm_hadds_pi16
-  // CHECK: call x86_mmx @llvm.x86.ssse3.phadd.sw
-  // CHECK-ASM: phaddsw %mm{{.*}}, %mm{{.*}}
-  return _mm_hadds_pi16(a, b);
-}
-
-__m64 test_mm_hsub_pi16(__m64 a, __m64 b) {
-  // CHECK-LABEL: test_mm_hsub_pi16
-  // CHECK: call x86_mmx @llvm.x86.ssse3.phsub.w
-  // CHECK-ASM: phsubw %mm{{.*}}, %mm{{.*}}
-  return _mm_hsub_pi16(a, b);
-}
-
-__m64 test_mm_hsub_pi32(__m64 a, __m64 b) {
-  // CHECK-LABEL: test_mm_hsub_pi32
-  // CHECK: call x86_mmx @llvm.x86.ssse3.phsub.d
-  // CHECK-ASM: phsubd %mm{{.*}}, %mm{{.*}}
-  return _mm_hsub_pi32(a, b);
-}
-
-__m64 test_mm_hsubs_pi16(__m64 a, __m64 b) {
-  // CHECK-LABEL: test_mm_hsubs_pi16
-  // CHECK: call x86_mmx @llvm.x86.ssse3.phsub.sw
-  // CHECK-ASM: phsubsw %mm{{.*}}, %mm{{.*}}
-  return _mm_hsubs_pi16(a, b);
-}
-
-__m64 test_mm_maddubs_pi16(__m64 a, __m64 b) {
-  // CHECK-LABEL: test_mm_maddubs_pi16
-  // CHECK: call x86_mmx @llvm.x86.ssse3.pmadd.ub.sw
-  // CHECK-ASM: pmaddubsw %mm{{.*}}, %mm{{.*}}
-  return _mm_maddubs_pi16(a, b);
-}
-
-__m64 test_mm_mulhrs_pi16(__m64 a, __m64 b) {
-  // CHECK-LABEL: test_mm_mulhrs_pi16
-  // CHECK: call x86_mmx @llvm.x86.ssse3.pmul.hr.sw
-  // CHECK-ASM: pmulhrsw %mm{{.*}}, %mm{{.*}}
-  return _mm_mulhrs_pi16(a, b);
-}
-
-__m64 test_mm_shuffle_pi8(__m64 a, __m64 b) {
-  // CHECK-LABEL: test_mm_shuffle_pi8
-  // CHECK: call x86_mmx @llvm.x86.ssse3.pshuf.b
-  // CHECK-ASM: pshufb %mm{{.*}}, %mm{{.*}}
-  return _mm_shuffle_pi8(a, b);
-}
-
-__m64 test_mm_sign_pi8(__m64 a, __m64 b) {
-  // CHECK-LABEL: test_mm_sign_pi8
-  // CHECK: call x86_mmx @llvm.x86.ssse3.psign.b
-  // CHECK-ASM: psignb %mm{{.*}}, %mm{{.*}}
-  return _mm_sign_pi8(a, b);
-}
-
-__m64 test_mm_sign_pi16(__m64 a, __m64 b) {
-  // CHECK-LABEL: test_mm_sign_pi16
-  // CHECK: call x86_mmx @llvm.x86.ssse3.psign.w
-  // CHECK-ASM: psignw %mm{{.*}}, %mm{{.*}}
-  return _mm_sign_pi16(a, b);
-}
-
-__m64 test_mm_sign_pi32(__m64 a, __m64 b) {
-  // CHECK-LABEL: test_mm_sign_pi32
-  // CHECK: call x86_mmx @llvm.x86.ssse3.psign.d
-  // CHECK-ASM: psignd %mm{{.*}}, %mm{{.*}}
-  return _mm_sign_pi32(a, b);
-}
-
 __m64 test_mm_abs_pi8(__m64 a) {
   // CHECK-LABEL: test_mm_abs_pi8
   // CHECK: call x86_mmx @llvm.x86.ssse3.pabs.b
@@ -114,111 +30,6 @@ __m64 test_mm_abs_pi32(__m64 a) {
   return _mm_abs_pi32(a);
 }
 
-__m64 test_mm_alignr_pi8(__m64 a, __m64 b) {
-  // CHECK-LABEL: test_mm_alignr_pi8
-  // CHECK: call x86_mmx @llvm.x86.mmx.palignr.b
-  // CHECK-ASM: palignr $2, %mm{{.*}}, %mm{{.*}}
-  return _mm_alignr_pi8(a, b, 2);
-}
-
-__m64 test_mm_cvtpd_pi32(__m128d a) {
-  // CHECK-LABEL: test_mm_cvtpd_pi32
-  // CHECK: call x86_mmx @llvm.x86.sse.cvtpd2pi
-  // CHECK-ASM: cvtpd2pi %xmm{{.*}}, %mm{{.*}}
-  return _mm_cvtpd_pi32(a);
-}
-
-__m64 test_mm_cvttpd_pi32(__m128d a) {
-  // CHECK-LABEL: test_mm_cvttpd_pi32
-  // CHECK: call x86_mmx @llvm.x86.sse.cvttpd2pi
-  // CHECK-ASM: cvttpd2pi %xmm{{.*}}, %mm{{.*}}
-  return _mm_cvttpd_pi32(a);
-}
-
-__m128d test_mm_cvtpi32_pd(__m64 a) {
-  // CHECK-LABEL: test_mm_cvtpi32_pd
-  // CHECK: call <2 x double> @llvm.x86.sse.cvtpi2pd
-  // CHECK-ASM: cvtpi2pd %mm{{.*}}, %xmm{{.*}}
-  return _mm_cvtpi32_pd(a);
-}
-
-__m64 test_mm_mul_su32(__m64 a, __m64 b) {
-  // CHECK-LABEL: test_mm_mul_su32
-  // CHECK: call x86_mmx @llvm.x86.mmx.pmulu.dq
-  // CHECK-ASM: pmuludq %mm{{.*}}, %mm{{.*}}
-  return _mm_mul_su32(a, b);
-}
-
-__m64 test_mm_shuffle_pi16(__m64 a) {
-  // CHECK-LABEL: test_mm_shuffle_pi16
-  // CHECK: call x86_mmx @llvm.x86.sse.pshuf.w
-  // CHECK-ASM: pshufw $3, %mm{{.*}}, %mm{{.*}}
-  return _mm_shuffle_pi16(a, 3);
-}
-
-__m64 test_mm_mulhi_pu16(__m64 a, __m64 b) {
-  // CHECK-LABEL: test_mm_mulhi_pu16
-  // CHECK: call x86_mmx @llvm.x86.mmx.pmulhu.w
-  // CHECK-ASM: pmulhuw %mm{{.*}}, %mm{{.*}}
-  return _mm_mulhi_pu16(a, b);
-}
-

Re: [PATCH] D13388: Add support for querying the visibility of a cursor

2015-11-14 Thread Milian Wolff via cfe-commits
milianw accepted this revision.
milianw added a comment.
This revision is now accepted and ready to land.

From my POV, this looks good.


http://reviews.llvm.org/D13388



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


Re: r242121 - Add support for -fuse-ld= in the mingw toolchain driver.

2015-11-14 Thread Filipe Cabecinhas via cfe-commits
Handling of values other than lld looked weird.
Can you make it a hard error to use something other than, I guess, ld,
gold, lld?
Or are there other linkers available?

  Filipe

On Friday, 13 November 2015, Yaron Keren via cfe-commits <
cfe-commits@lists.llvm.org> wrote:

> Sure, r253066.
>
>
> 2015-11-13 19:40 GMT+02:00 Rafael Espíndola  >:
>
>> This needs a testcase. Nothing is checking the linker invocation.
>>
>> On 14 July 2015 at 01:23, Yaron Keren > > wrote:
>> > Author: yrnkrn
>> > Date: Tue Jul 14 00:23:34 2015
>> > New Revision: 242121
>> >
>> > URL: http://llvm.org/viewvc/llvm-project?rev=242121&view=rev
>> > Log:
>> > Add support for -fuse-ld= in the mingw toolchain driver.
>> > We will still default to ld until such a time lld become a
>> > stable release. lld supports arm NT under the machine name "thumb2pe".
>> >
>> > http://reviews.llvm.org/D11088
>> >
>> > Patch by Martell Malone
>> > Reviewed by Reid Kleckner
>> >
>> >
>> > Modified:
>> > cfe/trunk/lib/Driver/Tools.cpp
>> >
>> > Modified: cfe/trunk/lib/Driver/Tools.cpp
>> > URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=242121&r1=242120&r2=242121&view=diff
>> >
>> ==
>> > --- cfe/trunk/lib/Driver/Tools.cpp (original)
>> > +++ cfe/trunk/lib/Driver/Tools.cpp Tue Jul 14 00:23:34 2015
>> > @@ -8947,6 +8947,12 @@ void MinGW::Linker::ConstructJob(Compila
>> >// handled somewhere else.
>> >Args.ClaimAllArgs(options::OPT_w);
>> >
>> > +  StringRef LinkerName = Args.getLastArgValue(options::OPT_fuse_ld_EQ,
>> "ld");
>> > +  if (LinkerName.equals_lower("lld")) {
>> > +CmdArgs.push_back("-flavor");
>> > +CmdArgs.push_back("gnu");
>> > +  }
>> > +
>> >if (!D.SysRoot.empty())
>> >  CmdArgs.push_back(Args.MakeArgString("--sysroot=" + D.SysRoot));
>> >
>> > @@ -8958,6 +8964,8 @@ void MinGW::Linker::ConstructJob(Compila
>> >  CmdArgs.push_back("i386pe");
>> >if (TC.getArch() == llvm::Triple::x86_64)
>> >  CmdArgs.push_back("i386pep");
>> > +  if (TC.getArch() == llvm::Triple::arm)
>> > +CmdArgs.push_back("thumb2pe");
>> >
>> >if (Args.hasArg(options::OPT_mwindows)) {
>> >  CmdArgs.push_back("--subsystem");
>> > @@ -9067,7 +9075,7 @@ void MinGW::Linker::ConstructJob(Compila
>> >
>> >if (Args.hasArg(options::OPT_static))
>> >  CmdArgs.push_back("--end-group");
>> > -  else
>> > +  else if (!LinkerName.equals_lower("lld"))
>> >  AddLibGCC(Args, CmdArgs);
>> >  }
>> >
>> > @@ -9078,7 +9086,7 @@ void MinGW::Linker::ConstructJob(Compila
>> >
>> CmdArgs.push_back(Args.MakeArgString(TC.GetFilePath("crtend.o")));
>> >  }
>> >}
>> > -  const char *Exec = Args.MakeArgString(TC.GetProgramPath("ld"));
>> > +  const char *Exec =
>> Args.MakeArgString(TC.GetProgramPath(LinkerName.data()));
>> >C.addCommand(llvm::make_unique(JA, *this, Exec, CmdArgs));
>> >  }
>> >
>> >
>> >
>> > ___
>> > cfe-commits mailing list
>> > cfe-comm...@cs.uiuc.edu
>> 
>> > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>>
>
>

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


Re: r242121 - Add support for -fuse-ld= in the mingw toolchain driver.

2015-11-14 Thread Rafael Espíndola via cfe-commits
On 15 November 2015 at 02:39, Filipe Cabecinhas  wrote:
> Handling of values other than lld looked weird.
> Can you make it a hard error to use something other than, I guess, ld, gold,
> lld?
> Or are there other linkers available?

What I find strange is that we use -flavor at all. We should ideally
just be using different links to lld, like we do with "-fuse-ld=lld2".


Cheers,
Rafael
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r253133 - Fix spelling error in comment.

2015-11-14 Thread Craig Topper via cfe-commits
Author: ctopper
Date: Sat Nov 14 12:15:55 2015
New Revision: 253133

URL: http://llvm.org/viewvc/llvm-project?rev=253133&view=rev
Log:
Fix spelling error in comment.

Modified:
cfe/trunk/lib/Parse/ParseDecl.cpp

Modified: cfe/trunk/lib/Parse/ParseDecl.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseDecl.cpp?rev=253133&r1=253132&r2=253133&view=diff
==
--- cfe/trunk/lib/Parse/ParseDecl.cpp (original)
+++ cfe/trunk/lib/Parse/ParseDecl.cpp Sat Nov 14 12:15:55 2015
@@ -2157,7 +2157,7 @@ void Parser::ParseSpecifierQualifierList
 DS.ClearStorageClassSpecs();
   }
 
-  // Issue diagnostic and remove function specfier if present.
+  // Issue diagnostic and remove function specifier if present.
   if (Specs & DeclSpec::PQ_FunctionSpecifier) {
 if (DS.isInlineSpecified())
   Diag(DS.getInlineSpecLoc(), diag::err_typename_invalid_functionspec);


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


r253136 - Merge some similar diagnostics using %select.

2015-11-14 Thread Craig Topper via cfe-commits
Author: ctopper
Date: Sat Nov 14 12:16:08 2015
New Revision: 253136

URL: http://llvm.org/viewvc/llvm-project?rev=253136&view=rev
Log:
Merge some similar diagnostics using %select.

Modified:
cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td
cfe/trunk/lib/Parse/ParseCXXInlineMethods.cpp
cfe/trunk/lib/Parse/ParseDecl.cpp
cfe/trunk/lib/Parse/ParseDeclCXX.cpp
cfe/trunk/lib/Parse/Parser.cpp
cfe/trunk/lib/Sema/DeclSpec.cpp

Modified: cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td?rev=253136&r1=253135&r2=253136&view=diff
==
--- cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td (original)
+++ cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td Sat Nov 14 12:16:08 
2015
@@ -71,9 +71,8 @@ def ext_nullability : Extension<
 
 def error_empty_enum : Error<"use of empty enum">;
 def err_invalid_sign_spec : Error<"'%0' cannot be signed or unsigned">;
-def err_invalid_short_spec : Error<"'short %0' is invalid">;
-def err_invalid_long_spec : Error<"'long %0' is invalid">;
-def err_invalid_longlong_spec : Error<"'long long %0' is invalid">;
+def err_invalid_width_spec : Error<
+  "'%select{|short|long|long long}0 %1' is invalid">;
 def err_invalid_complex_spec : Error<"'_Complex %0' is invalid">;
 def err_friend_decl_spec : Error<"'%0' is invalid in friend declarations">;
 
@@ -380,10 +379,8 @@ def err_friend_invalid_in_context : Erro
   "'friend' used outside of class">;
 def err_use_of_tag_name_without_tag : Error<
   "must use '%1' tag to refer to type %0%select{| in this scope}2">;
-def err_templated_using_directive : Error<
-  "cannot template a using directive">;
-def err_templated_using_declaration : Error<
-  "cannot template a using declaration">;
+def err_templated_using_directive_declaration : Error<
+  "cannot template a using %select{directive|declaration}0">;
 def err_unexpected_colon_in_nested_name_spec : Error<
   "unexpected ':' in nested name specifier; did you mean '::'?">;
 def err_unexpected_token_in_nested_name_spec : Error<
@@ -698,12 +695,9 @@ def warn_static_inline_explicit_inst_ign
 // Constructor template diagnostics.
 def err_out_of_line_constructor_template_id : Error<
   "out-of-line constructor for %0 cannot have template arguments">;
-def err_out_of_line_template_id_names_constructor : Error<
+def err_out_of_line_template_id_type_names_constructor : Error<
   "qualified reference to %0 is a constructor name rather than a "
-  "template name wherever a constructor can be declared">;
-def err_out_of_line_type_names_constructor : Error<
-  "qualified reference to %0 is a constructor name rather than a "
-  "type wherever a constructor can be declared">;
+  "%select{template name|type}1 wherever a constructor can be declared">;
 
 def err_expected_qualified_after_typename : Error<
   "expected a qualified name after 'typename'">;
@@ -743,15 +737,11 @@ def err_missing_whitespace_digraph : Err
   "%select{template 
name|const_cast|dynamic_cast|reinterpret_cast|static_cast}0"
   " which forms the digraph '<:' (aka '[') and a ':', did you mean '< ::'?">;
 
-def ext_deleted_function : ExtWarn<
-  "deleted function definitions are a C++11 extension">, InGroup;
-def warn_cxx98_compat_deleted_function : Warning<
-  "deleted function definitions are incompatible with C++98">,
-  InGroup, DefaultIgnore;
-def ext_defaulted_function : ExtWarn<
-  "defaulted function definitions are a C++11 extension">, InGroup;
-def warn_cxx98_compat_defaulted_function : Warning<
-  "defaulted function definitions are incompatible with C++98">,
+def ext_defaulted_deleted_function : ExtWarn<
+  "%select{defaulted|deleted}0 function definitions are a C++11 extension">,
+  InGroup;
+def warn_cxx98_compat_defaulted_deleted_function : Warning<
+  "%select{defaulted|deleted}0 function definitions are incompatible with 
C++98">,
   InGroup, DefaultIgnore;
 
 // C++11 in-class member initialization

Modified: cfe/trunk/lib/Parse/ParseCXXInlineMethods.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseCXXInlineMethods.cpp?rev=253136&r1=253135&r2=253136&view=diff
==
--- cfe/trunk/lib/Parse/ParseCXXInlineMethods.cpp (original)
+++ cfe/trunk/lib/Parse/ParseCXXInlineMethods.cpp Sat Nov 14 12:16:08 2015
@@ -67,8 +67,9 @@ NamedDecl *Parser::ParseCXXInlineMethodD
 SourceLocation KWEndLoc = Tok.getEndLoc().getLocWithOffset(-1);
 if (TryConsumeToken(tok::kw_delete, KWLoc)) {
   Diag(KWLoc, getLangOpts().CPlusPlus11
-  ? diag::warn_cxx98_compat_deleted_function
-  : diag::ext_deleted_function);
+  ? diag::warn_cxx98_compat_defaulted_deleted_function
+  : diag::ext_defaulted_deleted_function)
+<< 1 /* deleted */;
   Actions.SetDeclDeleted

r253134 - Fix 80 column violation. NFC.

2015-11-14 Thread Craig Topper via cfe-commits
Author: ctopper
Date: Sat Nov 14 12:16:00 2015
New Revision: 253134

URL: http://llvm.org/viewvc/llvm-project?rev=253134&view=rev
Log:
Fix 80 column violation. NFC.

Modified:
cfe/trunk/lib/Parse/ParseDeclCXX.cpp

Modified: cfe/trunk/lib/Parse/ParseDeclCXX.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseDeclCXX.cpp?rev=253134&r1=253133&r2=253134&view=diff
==
--- cfe/trunk/lib/Parse/ParseDeclCXX.cpp (original)
+++ cfe/trunk/lib/Parse/ParseDeclCXX.cpp Sat Nov 14 12:16:00 2015
@@ -280,8 +280,8 @@ Decl *Parser::ParseNamespaceAlias(Source
   if (ExpectAndConsume(tok::semi, 
diag::err_expected_semi_after_namespace_name))
 SkipUntil(tok::semi);
 
-  return Actions.ActOnNamespaceAliasDef(getCurScope(), NamespaceLoc, AliasLoc, 
Alias,
-SS, IdentLoc, Ident);
+  return Actions.ActOnNamespaceAliasDef(getCurScope(), NamespaceLoc, AliasLoc,
+Alias, SS, IdentLoc, Ident);
 }
 
 /// ParseLinkage - We know that the current token is a string_literal


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


r253135 - Minor formatting fixes. NFC

2015-11-14 Thread Craig Topper via cfe-commits
Author: ctopper
Date: Sat Nov 14 12:16:02 2015
New Revision: 253135

URL: http://llvm.org/viewvc/llvm-project?rev=253135&view=rev
Log:
Minor formatting fixes. NFC

Modified:
cfe/trunk/lib/Parse/ParseObjc.cpp

Modified: cfe/trunk/lib/Parse/ParseObjc.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseObjc.cpp?rev=253135&r1=253134&r2=253135&view=diff
==
--- cfe/trunk/lib/Parse/ParseObjc.cpp (original)
+++ cfe/trunk/lib/Parse/ParseObjc.cpp Sat Nov 14 12:16:02 2015
@@ -916,7 +916,7 @@ void Parser::ParseObjCPropertyAttribute(
 
   // getter/setter require extra treatment.
   unsigned DiagID = IsSetter ? diag::err_objc_expected_equal_for_setter :
-diag::err_objc_expected_equal_for_getter;
+   diag::err_objc_expected_equal_for_getter;
 
   if (ExpectAndConsume(tok::equal, DiagID)) {
 SkipUntil(tok::r_paren, StopAtSemi);
@@ -931,7 +931,6 @@ void Parser::ParseObjCPropertyAttribute(
 return cutOffParsing();
   }
 
-  
   SourceLocation SelLoc;
   IdentifierInfo *SelIdent = ParseObjCSelectorPiece(SelLoc);
 


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


r253142 - Fix indentation. NFC

2015-11-14 Thread Craig Topper via cfe-commits
Author: ctopper
Date: Sat Nov 14 13:31:52 2015
New Revision: 253142

URL: http://llvm.org/viewvc/llvm-project?rev=253142&view=rev
Log:
Fix indentation. NFC

Modified:
cfe/trunk/lib/Sema/DeclSpec.cpp

Modified: cfe/trunk/lib/Sema/DeclSpec.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/DeclSpec.cpp?rev=253142&r1=253141&r2=253142&view=diff
==
--- cfe/trunk/lib/Sema/DeclSpec.cpp (original)
+++ cfe/trunk/lib/Sema/DeclSpec.cpp Sat Nov 14 13:31:52 2015
@@ -516,12 +516,12 @@ bool DeclSpec::SetStorageClassSpec(Sema
 case SCS_extern:
 case SCS_private_extern:
 case SCS_static:
-if (S.getLangOpts().OpenCLVersion < 120) {
-  DiagID   = diag::err_opencl_unknown_type_specifier;
-  PrevSpec = getSpecifierName(SC);
-  return true;
-}
-break;
+  if (S.getLangOpts().OpenCLVersion < 120) {
+DiagID   = diag::err_opencl_unknown_type_specifier;
+PrevSpec = getSpecifierName(SC);
+return true;
+  }
+  break;
 case SCS_auto:
 case SCS_register:
   DiagID   = diag::err_opencl_unknown_type_specifier;


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


r253143 - Move diagnostics from Parse to Sema to remove Sema's dependency on ParserDiagnostic.h diagnostics.

2015-11-14 Thread Craig Topper via cfe-commits
Author: ctopper
Date: Sat Nov 14 13:31:56 2015
New Revision: 253143

URL: http://llvm.org/viewvc/llvm-project?rev=253143&view=rev
Log:
Move diagnostics from Parse to Sema to remove Sema's dependency on 
ParserDiagnostic.h diagnostics.

Modified:
cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td
cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
cfe/trunk/lib/Parse/ParseDecl.cpp
cfe/trunk/lib/Sema/DeclSpec.cpp
cfe/trunk/lib/Sema/SemaDecl.cpp
cfe/trunk/lib/Sema/SemaType.cpp

Modified: cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td?rev=253143&r1=253142&r2=253143&view=diff
==
--- cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td (original)
+++ cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td Sat Nov 14 13:31:56 
2015
@@ -51,14 +51,6 @@ def warn_extra_semi_after_mem_fn_def : W
   "extra ';' after member function definition">,
   InGroup, DefaultIgnore;
 
-def ext_duplicate_declspec : ExtWarn<"duplicate '%0' declaration specifier">,
-  InGroup;
-def warn_duplicate_declspec : Warning<"duplicate '%0' declaration specifier">,
-  InGroup;
-def ext_plain_complex : ExtWarn<
-  "plain '_Complex' requires a type specifier; assuming '_Complex double'">;
-def ext_integer_complex : Extension<
-  "complex integer types are a GNU extension">, InGroup;
 def ext_thread_before : Extension<"'__thread' before '%0'">;
 def ext_keyword_as_ident : ExtWarn<
   "keyword '%0' will be made available as an identifier "
@@ -70,11 +62,6 @@ def ext_nullability : Extension<
   InGroup>;
 
 def error_empty_enum : Error<"use of empty enum">;
-def err_invalid_sign_spec : Error<"'%0' cannot be signed or unsigned">;
-def err_invalid_width_spec : Error<
-  "'%select{|short|long|long long}0 %1' is invalid">;
-def err_invalid_complex_spec : Error<"'_Complex %0' is invalid">;
-def err_friend_decl_spec : Error<"'%0' is invalid in friend declarations">;
 
 def ext_ident_list_in_param : Extension<
   "type-less parameter names in function declaration">;
@@ -285,11 +272,6 @@ def err_init_list_bin_op : Error<"initia
 def warn_cxx98_compat_trailing_return_type : Warning<
   "trailing return types are incompatible with C++98">,
   InGroup, DefaultIgnore;
-def ext_auto_type_specifier : ExtWarn<
-  "'auto' type specifier is a C++11 extension">, InGroup;
-def warn_auto_storage_class : Warning<
-  "'auto' storage class specifier is redundant and incompatible with C++11">,
-  InGroup, DefaultIgnore;
 def ext_auto_storage_class : ExtWarn<
   "'auto' storage class specifier is not permitted in C++11, and will not "
   "be supported in future releases">, InGroup>;
@@ -329,9 +311,6 @@ def err_unspecified_vla_size_with_static
   "'static' may not be used with an unspecified variable length array size">;
 def err_unspecified_size_with_static : Error<
   "'static' may not be used without an array size">;
-def warn_deprecated_register : Warning<
-  "'register' storage class specifier is deprecated">,
-  InGroup;
 def err_expected_parentheses_around_typename : Error<
   "expected parentheses around type name in %0 expression">;
 
@@ -350,35 +329,8 @@ def err_typename_invalid_constexpr : Err
 def err_typename_identifiers_only : Error<
   "typename is allowed for identifiers only">;
 
-def err_invalid_decl_spec_combination : Error<
-  "cannot combine with previous '%0' declaration specifier">;
-def err_invalid_vector_decl_spec_combination : Error<
-  "cannot combine with previous '%0' declaration specifier. "
-  "'__vector' must be first">;
-def err_invalid_pixel_decl_spec_combination : Error<
-  "'__pixel' must be preceded by '__vector'.  "
-  "'%0' declaration specifier not allowed here">;
-def err_invalid_vector_bool_decl_spec : Error<
-  "cannot use '%0' with '__vector bool'">;
-def err_invalid_vector_long_decl_spec : Error<
-  "cannot use 'long' with '__vector'">;
-def err_invalid_vector_float_decl_spec : Error<
-  "cannot use 'float' with '__vector'">;
-def err_invalid_vector_double_decl_spec : Error <
-  "use of 'double' with '__vector' requires VSX support to be enabled "
-  "(available on POWER7 or later)">;
-def err_invalid_vector_long_long_decl_spec : Error <
-  "use of 'long long' with '__vector bool' requires VSX support (available on "
-  "POWER7 or later) or extended Altivec support (available on POWER8 or later) 
" 
-  "to be enabled">;
-def err_invalid_vector_long_double_decl_spec : Error<
-  "cannot use 'long double' with '__vector'">;
-def warn_vector_long_decl_spec_combination : Warning<
-  "Use of 'long' with '__vector' is deprecated">, InGroup;
 def err_friend_invalid_in_context : Error<
   "'friend' used outside of class">;
-def err_use_of_tag_name_without_tag : Error<
-  "must use '%1' tag to refer to type %0%select{| in this scope}2">;
 def err_templated_using_directive_declaration : Error<
   "cannot template a using %select{directiv

Re: r242121 - Add support for -fuse-ld= in the mingw toolchain driver.

2015-11-14 Thread Yaron Keren via cfe-commits
Filipe: with mingw targetting Windows/COFF files I think only ld and lld
makes sense as gold creates ELF files. I included Microsoft link.exe in the
mingw-useld test but rethinking, no one really uses that configuration, see
attached patch. Is that what you mean?

Rafael: running under Windows which has symbolic links but they aren't
really used as much (or at all) as under Linux. For example clang-cl.exe
and clang++.exe are copies (not links) of clang.exe.

Martell, what do you think?



2015-11-14 19:52 GMT+02:00 Rafael Espíndola :

> On 15 November 2015 at 02:39, Filipe Cabecinhas  wrote:
> > Handling of values other than lld looked weird.
> > Can you make it a hard error to use something other than, I guess, ld,
> gold,
> > lld?
> > Or are there other linkers available?
>
> What I find strange is that we use -flavor at all. We should ideally
> just be using different links to lld, like we do with "-fuse-ld=lld2".
>
>
> Cheers,
> Rafael
>
Index: tools/clang/lib/Driver/Tools.cpp
===
--- tools/clang/lib/Driver/Tools.cpp(revision 253024)
+++ tools/clang/lib/Driver/Tools.cpp(working copy)
@@ -9470,6 +9470,8 @@
   if (LinkerName.equals_lower("lld")) {
 CmdArgs.push_back("-flavor");
 CmdArgs.push_back("gnu");
+  } else if (!LinkerName.equals_lower("ld")) {
+D.Diag(diag::err_drv_unsupported_linker) << LinkerName;
   }
 
   if (!D.SysRoot.empty())
Index: tools/clang/test/Driver/mingw-useld.c
===
--- tools/clang/test/Driver/mingw-useld.c   (revision 253069)
+++ tools/clang/test/Driver/mingw-useld.c   (working copy)
@@ -7,10 +7,6 @@
 // CHECK_LLD_32: lld" "-flavor" "gnu"
 // CHECK_LLD_32: "i386pe"
 
-// RUN: %clang -### -target i686-pc-windows-gnu 
--sysroot=%S/Inputs/mingw_clang_tree/mingw32 %s -fuse-ld=link.exe 2>&1 | 
FileCheck -check-prefix=CHECK_LINK_32 %s
-// CHECK_LINK_32: link.exe"
-// CHECK_LINK_32: "i386pe"
-
 // RUN: %clang -### -target x86_64-pc-windows-gnu 
--sysroot=%S/Inputs/mingw_clang_tree/mingw32 %s -fuse-ld=lld 2>&1 | FileCheck 
-check-prefix=CHECK_LLD_64 %s
 // CHECK_LLD_64: lld" "-flavor" "gnu"
 // CHECK_LLD_64: "i386pep"
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: r242121 - Add support for -fuse-ld= in the mingw toolchain driver.

2015-11-14 Thread Martell Malone via cfe-commits
The reason why I didn't use -fuse-ld=lld2 was because on Windows we don't
have symlinks.
I figured passing flavor gets over this hurdle and the installation takes
up less space.
If you want to change it I have no objections we will just have to look at
having lld's cmake to ensure it is created on Windows like we do for clang++

The idea of forcing either lld or ld LGTM yaron.
I don't think using MSVC link.exe makes any sense to mingw users.

On Saturday, November 14, 2015, Yaron Keren  wrote:

> Filipe: with mingw targetting Windows/COFF files I think only ld and lld
> makes sense as gold creates ELF files. I included Microsoft link.exe in the
> mingw-useld test but rethinking, no one really uses that configuration, see
> attached patch. Is that what you mean?
>
> Rafael: running under Windows which has symbolic links but they aren't
> really used as much (or at all) as under Linux. For example clang-cl.exe
> and clang++.exe are copies (not links) of clang.exe.
>
> Martell, what do you think?
>
>
>
> 2015-11-14 19:52 GMT+02:00 Rafael Espíndola  >:
>
>> On 15 November 2015 at 02:39, Filipe Cabecinhas > > wrote:
>> > Handling of values other than lld looked weird.
>> > Can you make it a hard error to use something other than, I guess, ld,
>> gold,
>> > lld?
>> > Or are there other linkers available?
>>
>> What I find strange is that we use -flavor at all. We should ideally
>> just be using different links to lld, like we do with "-fuse-ld=lld2".
>>
>>
>> Cheers,
>> Rafael
>>
>
>
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: r253012 - [modules] When a declaration has non-trivial visibility, check whether it's

2015-11-14 Thread Richard Smith via cfe-commits
On Nov 13, 2015 7:23 PM, "Sean Silva"  wrote:
>
>
>
> On Thu, Nov 12, 2015 at 9:14 PM, Richard Smith via cfe-commits <
cfe-commits@lists.llvm.org> wrote:
>>
>> Author: rsmith
>> Date: Thu Nov 12 23:14:45 2015
>> New Revision: 253012
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=253012&view=rev
>> Log:
>> [modules] When a declaration has non-trivial visibility, check whether
it's
>
>
> What is "non-trivial visibility"? Is this "visibility" something that
exists in the present C++ language? (e.g. `using namespace std` etc.) or is
this a different notion?

This is the modules notion of visibility (whether the declaration has been
imported or not). Here, non-trivial visibility means "not known to be
unconditionally visible", and corresponds to the Hidden flag on the Decl
being true.

> -- Sean Silva
>
>>
>> actually hidden before we check its linkage. This avoids computing the
linkage
>> "too early" for an anonymous struct with a typedef name for linkage.
>>
>> Modified:
>> cfe/trunk/include/clang/Sema/Lookup.h
>> cfe/trunk/test/Modules/submodule-visibility.cpp
>>
>> Modified: cfe/trunk/include/clang/Sema/Lookup.h
>> URL:
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/Lookup.h?rev=253012&r1=253011&r2=253012&view=diff
>>
==
>> --- cfe/trunk/include/clang/Sema/Lookup.h (original)
>> +++ cfe/trunk/include/clang/Sema/Lookup.h Thu Nov 12 23:14:45 2015
>> @@ -303,8 +303,7 @@ public:
>>  if (!D->isInIdentifierNamespace(IDNS))
>>return nullptr;
>>
>> -if (!D->isHidden() || isHiddenDeclarationVisible(D) ||
>> -isVisibleSlow(getSema(), D))
>> +if (isVisible(getSema(), D) || isHiddenDeclarationVisible(D))
>>return D;
>>
>>  return getAcceptableDeclSlow(D);
>>
>> Modified: cfe/trunk/test/Modules/submodule-visibility.cpp
>> URL:
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/submodule-visibility.cpp?rev=253012&r1=253011&r2=253012&view=diff
>>
==
>> --- cfe/trunk/test/Modules/submodule-visibility.cpp (original)
>> +++ cfe/trunk/test/Modules/submodule-visibility.cpp Thu Nov 12 23:14:45
2015
>> @@ -28,3 +28,10 @@ int k = n + m; // OK, a and b are visibl
>>  #ifndef B
>>  #error B is not defined
>>  #endif
>> +
>> +// Ensure we don't compute the linkage of this struct before we find it
has a
>> +// typedef name for linkage purposes.
>> +typedef struct {
>> +  int p;
>> +  void (*f)(int p);
>> +} name_for_linkage;
>>
>>
>> ___
>> cfe-commits mailing list
>> cfe-commits@lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
>
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r253146 - [WebAssembly] Remove the "const" attribute from __builtin_wasm_memory_size.

2015-11-14 Thread Dan Gohman via cfe-commits
Author: djg
Date: Sat Nov 14 16:57:34 2015
New Revision: 253146

URL: http://llvm.org/viewvc/llvm-project?rev=253146&view=rev
Log:
[WebAssembly] Remove the "const" attribute from __builtin_wasm_memory_size.

Modified:
cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def

Modified: cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def?rev=253146&r1=253145&r2=253146&view=diff
==
--- cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def (original)
+++ cfe/trunk/include/clang/Basic/BuiltinsWebAssembly.def Sat Nov 14 16:57:34 
2015
@@ -16,7 +16,9 @@
 
 // The format of this database matches clang/Basic/Builtins.def.
 
-BUILTIN(__builtin_wasm_memory_size, "z", "nc")
+// Note that memory_size is not "c" (readnone) because it must be sequenced 
with
+// respect to grow_memory calls.
+BUILTIN(__builtin_wasm_memory_size, "z", "n")
 BUILTIN(__builtin_wasm_grow_memory, "vz", "n")
 
 #undef BUILTIN


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


r253155 - Use Sema::getLocForEndOfToken instead of Preprocessor::getLocForEndOfToken. NFC

2015-11-14 Thread Craig Topper via cfe-commits
Author: ctopper
Date: Sat Nov 14 20:31:46 2015
New Revision: 253155

URL: http://llvm.org/viewvc/llvm-project?rev=253155&view=rev
Log:
Use Sema::getLocForEndOfToken instead of Preprocessor::getLocForEndOfToken. NFC

Modified:
cfe/trunk/lib/Sema/AnalysisBasedWarnings.cpp
cfe/trunk/lib/Sema/Sema.cpp
cfe/trunk/lib/Sema/SemaDeclAttr.cpp
cfe/trunk/lib/Sema/SemaDeclCXX.cpp
cfe/trunk/lib/Sema/SemaDeclObjC.cpp
cfe/trunk/lib/Sema/SemaExpr.cpp
cfe/trunk/lib/Sema/SemaExprCXX.cpp
cfe/trunk/lib/Sema/SemaExprObjC.cpp
cfe/trunk/lib/Sema/SemaFixItUtils.cpp

Modified: cfe/trunk/lib/Sema/AnalysisBasedWarnings.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/AnalysisBasedWarnings.cpp?rev=253155&r1=253154&r2=253155&view=diff
==
--- cfe/trunk/lib/Sema/AnalysisBasedWarnings.cpp (original)
+++ cfe/trunk/lib/Sema/AnalysisBasedWarnings.cpp Sat Nov 14 20:31:46 2015
@@ -34,7 +34,6 @@
 #include "clang/Analysis/CFGStmtMap.h"
 #include "clang/Basic/SourceLocation.h"
 #include "clang/Basic/SourceManager.h"
-#include "clang/Lex/Lexer.h"
 #include "clang/Lex/Preprocessor.h"
 #include "clang/Sema/ScopeInfo.h"
 #include "clang/Sema/SemaInternal.h"
@@ -657,8 +656,7 @@ static void CreateIfFixit(Sema &S, const
 CharSourceRange::getCharRange(If->getLocStart(),
   Then->getLocStart()));
 if (Else) {
-  SourceLocation ElseKwLoc = Lexer::getLocForEndOfToken(
-  Then->getLocEnd(), 0, S.getSourceManager(), S.getLangOpts());
+  SourceLocation ElseKwLoc = S.getLocForEndOfToken(Then->getLocEnd());
   Fixit2 = FixItHint::CreateRemoval(
   SourceRange(ElseKwLoc, Else->getLocEnd()));
 }

Modified: cfe/trunk/lib/Sema/Sema.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/Sema.cpp?rev=253155&r1=253154&r2=253155&view=diff
==
--- cfe/trunk/lib/Sema/Sema.cpp (original)
+++ cfe/trunk/lib/Sema/Sema.cpp Sat Nov 14 20:31:46 2015
@@ -1469,7 +1469,7 @@ bool Sema::tryToRecoverWithCall(ExprResu
 // arguments and that it returns something of a reasonable type,
 // so we can emit a fixit and carry on pretending that E was
 // actually a CallExpr.
-SourceLocation ParenInsertionLoc = PP.getLocForEndOfToken(Range.getEnd());
+SourceLocation ParenInsertionLoc = getLocForEndOfToken(Range.getEnd());
 Diag(Loc, PD)
   << /*zero-arg*/ 1 << Range
   << (IsCallableWithAppend(E.get())

Modified: cfe/trunk/lib/Sema/SemaDeclAttr.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclAttr.cpp?rev=253155&r1=253154&r2=253155&view=diff
==
--- cfe/trunk/lib/Sema/SemaDeclAttr.cpp (original)
+++ cfe/trunk/lib/Sema/SemaDeclAttr.cpp Sat Nov 14 20:31:46 2015
@@ -316,7 +316,7 @@ bool Sema::checkStringLiteralArgumentAtt
 Diag(Loc->Loc, diag::err_attribute_argument_type)
 << Attr.getName() << AANT_ArgumentString
 << FixItHint::CreateInsertion(Loc->Loc, "\"")
-<< FixItHint::CreateInsertion(PP.getLocForEndOfToken(Loc->Loc), "\"");
+<< FixItHint::CreateInsertion(getLocForEndOfToken(Loc->Loc), "\"");
 Str = Loc->Ident->getName();
 if (ArgLocation)
   *ArgLocation = Loc->Loc;

Modified: cfe/trunk/lib/Sema/SemaDeclCXX.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclCXX.cpp?rev=253155&r1=253154&r2=253155&view=diff
==
--- cfe/trunk/lib/Sema/SemaDeclCXX.cpp (original)
+++ cfe/trunk/lib/Sema/SemaDeclCXX.cpp Sat Nov 14 20:31:46 2015
@@ -7035,7 +7035,7 @@ void Sema::CheckConversionDeclarator(Dec
   // If we can provide a correct fix-it hint, do so.
   if (After.isInvalid() && ConvTSI) {
 SourceLocation InsertLoc =
-PP.getLocForEndOfToken(ConvTSI->getTypeLoc().getLocEnd());
+getLocForEndOfToken(ConvTSI->getTypeLoc().getLocEnd());
 DB << FixItHint::CreateInsertion(InsertLoc, " ")
<< FixItHint::CreateInsertionFromRange(
   InsertLoc, CharSourceRange::getTokenRange(Before))
@@ -8388,7 +8388,7 @@ bool Sema::CheckUsingDeclQualifier(Sourc
 } else {
   // Convert 'using X::Y;' to 'typedef X::Y Y;'.
   SourceLocation InsertLoc =
-  PP.getLocForEndOfToken(NameInfo.getLocEnd());
+  getLocForEndOfToken(NameInfo.getLocEnd());
   Diag(InsertLoc, diag::note_using_decl_class_member_workaround)
 << 1 // typedef declaration
 << FixItHint::CreateReplacement(UsingLoc, "typedef")
@@ -12213,7 +12213,7 @@ FriendDecl *Sema::CheckFriendTypeDecl(So
diag::ext_unelaborated_friend_type)
   << (unsigned) RD->getTagKind()
   << T
-  << FixItHint::CreateInsertion(PP.getLocForEndOfToke

r253156 - [Sema] Don't crash trying to diagnose abs called on a pointer type

2015-11-14 Thread David Majnemer via cfe-commits
Author: majnemer
Date: Sat Nov 14 21:04:34 2015
New Revision: 253156

URL: http://llvm.org/viewvc/llvm-project?rev=253156&view=rev
Log:
[Sema] Don't crash trying to diagnose abs called on a pointer type

Clang tries to figure out if a call to abs is suspicious by looking
through implicit casts to look at the underlying, implicitly converted
type.
Interestingly, C has implicit conversions from pointer-ish types like
function to less exciting types like int.  This trips up our 'abs'
checker because it doesn't know which variant of 'abs' is appropriate.

Instead, diagnose 'abs' called on function types upfront.  This sort of
thing is highly suspicious and is likely indicative of a missing
pointer dereference/function call/array index operation.

This fixes PR25532.

Modified:
cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
cfe/trunk/lib/Sema/SemaChecking.cpp
cfe/trunk/test/Sema/warn-absolute-value.c

Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=253156&r1=253155&r2=253156&view=diff
==
--- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original)
+++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Sat Nov 14 21:04:34 
2015
@@ -67,6 +67,9 @@ def warn_wrong_absolute_value_type : War
   "when argument is of %select{integer|floating point|complex}2 type">,
   InGroup;
 def note_replace_abs_function : Note<"use function '%0' instead">;
+def warn_pointer_abs : Warning<
+  "taking the absolute value of %select{pointer|function|array}0 type %1 is 
suspicious">,
+  InGroup;
 
 def warn_infinite_recursive_function : Warning<
   "all paths through this function will call itself">,

Modified: cfe/trunk/lib/Sema/SemaChecking.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaChecking.cpp?rev=253156&r1=253155&r2=253156&view=diff
==
--- cfe/trunk/lib/Sema/SemaChecking.cpp (original)
+++ cfe/trunk/lib/Sema/SemaChecking.cpp Sat Nov 14 21:04:34 2015
@@ -5085,6 +5085,19 @@ void Sema::CheckAbsoluteValueFunction(co
 return;
   }
 
+  // Taking the absolute value of a pointer is very suspicious, they probably
+  // wanted to index into an array, dereference a pointer, call a function, 
etc.
+  if (ArgType->isPointerType() || ArgType->canDecayToPointerType()) {
+unsigned DiagType = 0;
+if (ArgType->isFunctionType())
+  DiagType = 1;
+else if (ArgType->isArrayType())
+  DiagType = 2;
+
+Diag(Call->getExprLoc(), diag::warn_pointer_abs) << DiagType << ArgType;
+return;
+  }
+
   // std::abs has overloads which prevent most of the absolute value problems
   // from occurring.
   if (IsStdAbs)

Modified: cfe/trunk/test/Sema/warn-absolute-value.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/warn-absolute-value.c?rev=253156&r1=253155&r2=253156&view=diff
==
--- cfe/trunk/test/Sema/warn-absolute-value.c (original)
+++ cfe/trunk/test/Sema/warn-absolute-value.c Sat Nov 14 21:04:34 2015
@@ -1,5 +1,5 @@
-// RUN: %clang_cc1 -triple i686-pc-linux-gnu -fsyntax-only -verify %s 
-Wabsolute-value
-// RUN: %clang_cc1 -triple i686-pc-linux-gnu -fsyntax-only %s -Wabsolute-value 
-fdiagnostics-parseable-fixits 2>&1 | FileCheck %s
+// RUN: %clang_cc1 -triple i686-pc-linux-gnu -fsyntax-only -verify %s 
-Wabsolute-value -Wno-int-conversion
+// RUN: %clang_cc1 -triple i686-pc-linux-gnu -fsyntax-only %s -Wabsolute-value 
-Wno-int-conversion -fdiagnostics-parseable-fixits 2>&1 | FileCheck %s
 
 int abs(int);
 long int labs(long int);
@@ -780,3 +780,19 @@ void test_unsigned_long(unsigned long x)
   // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:9-[[@LINE-3]]:24}:""
 }
 
+long long test_array() {
+  return llabs((long long[]){1});
+  // expected-warning@-1 {{absolute value of array type}}
+}
+long long test_function_pointer() {
+  return llabs(&test_function_pointer);
+  // expected-warning@-1 {{absolute value of pointer type}}
+}
+long long test_void_pointer(void *x) {
+  return llabs(x);
+  // expected-warning@-1 {{absolute value of pointer type}}
+}
+long long test_function() {
+  return llabs(test_function);
+  // expected-warning@-1 {{absolute value of function type}}
+}


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


r253157 - [analyzer] Refer to capture field to determine if capture is reference.

2015-11-14 Thread Devin Coughlin via cfe-commits
Author: dcoughlin
Date: Sat Nov 14 21:07:17 2015
New Revision: 253157

URL: http://llvm.org/viewvc/llvm-project?rev=253157&view=rev
Log:
[analyzer] Refer to capture field to determine if capture is reference.

The analyzer incorrectly treats captures as references if either the original
captured variable is a reference or the variable is captured by reference.
This causes the analyzer to crash when capturing a reference type by copy
(PR24914). Fix this by refering solely to the capture field to determine when a
DeclRefExpr for a lambda capture should be treated as a reference type.

https://llvm.org/bugs/show_bug.cgi?id=24914
rdar://problem/23524412

Modified:
cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp
cfe/trunk/test/Analysis/lambdas.cpp

Modified: cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp?rev=253157&r1=253156&r2=253157&view=diff
==
--- cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp Sat Nov 14 21:07:17 2015
@@ -1867,7 +1867,7 @@ void ExprEngine::VisitCommonDeclRefExpr(
 const auto *MD = D ? dyn_cast(D) : nullptr;
 const auto *DeclRefEx = dyn_cast(Ex);
 SVal V;
-bool CaptureByReference = false;
+bool IsReference;
 if (AMgr.options.shouldInlineLambdas() && DeclRefEx &&
 DeclRefEx->refersToEnclosingVariableOrCapture() && MD &&
 MD->getParent()->isLambda()) {
@@ -1882,22 +1882,22 @@ void ExprEngine::VisitCommonDeclRefExpr(
 // created in the lambda object.
 assert(VD->getType().isConstQualified());
 V = state->getLValue(VD, LocCtxt);
+IsReference = false;
   } else {
 Loc CXXThis =
 svalBuilder.getCXXThis(MD, LocCtxt->getCurrentStackFrame());
 SVal CXXThisVal = state->getSVal(CXXThis);
 V = state->getLValue(FD, CXXThisVal);
-if (FD->getType()->isReferenceType() &&
-!VD->getType()->isReferenceType())
-  CaptureByReference = true;
+IsReference = FD->getType()->isReferenceType();
   }
 } else {
   V = state->getLValue(VD, LocCtxt);
+  IsReference = VD->getType()->isReferenceType();
 }
 
 // For references, the 'lvalue' is the pointer address stored in the
 // reference region.
-if (VD->getType()->isReferenceType() || CaptureByReference) {
+if (IsReference) {
   if (const MemRegion *R = V.getAsRegion())
 V = state->getSVal(R);
   else

Modified: cfe/trunk/test/Analysis/lambdas.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/lambdas.cpp?rev=253157&r1=253156&r2=253157&view=diff
==
--- cfe/trunk/test/Analysis/lambdas.cpp (original)
+++ cfe/trunk/test/Analysis/lambdas.cpp Sat Nov 14 21:07:17 2015
@@ -90,6 +90,17 @@ void testReturnValue() {
   clang_analyzer_eval(b == 8); // expected-warning{{TRUE}}
 }
 
+void testAliasingBetweenParameterAndCapture() {
+  int i = 5;
+
+  auto l = [&i](int &p) {
+i++;
+p++;
+  };
+  l(i);
+  clang_analyzer_eval(i == 7); // expected-warning{{TRUE}}
+}
+
 // Nested lambdas.
 
 void testNestedLambdas() {
@@ -210,6 +221,67 @@ void captureConstants() {
   }();
 }
 
+void captureReferenceByCopy(int &p) {
+  int v = 7;
+  p = 8;
+
+  // p is a reference captured by copy
+  [&v,p]() mutable {
+v = p;
+p = 22;
+  }();
+
+  clang_analyzer_eval(v == 8); // expected-warning{{TRUE}}
+  clang_analyzer_eval(p == 8); // expected-warning{{TRUE}}
+}
+
+void captureReferenceByReference(int &p) {
+  int v = 7;
+  p = 8;
+
+  // p is a reference captured by reference
+  [&v,&p]() {
+v = p;
+p = 22;
+  }();
+
+  clang_analyzer_eval(v == 8); // expected-warning{{TRUE}}
+  clang_analyzer_eval(p == 22); // expected-warning{{TRUE}}
+}
+
+void callMutableLambdaMultipleTimes(int &p) {
+  int v = 0;
+  p = 8;
+
+  auto l = [&v, p]() mutable {
+v = p;
+p++;
+  };
+
+  l();
+
+  clang_analyzer_eval(v == 8); // expected-warning{{TRUE}}
+  clang_analyzer_eval(p == 8); // expected-warning{{TRUE}}
+
+  l();
+
+  clang_analyzer_eval(v == 9); // expected-warning{{TRUE}}
+  clang_analyzer_eval(p == 8); // expected-warning{{TRUE}}
+}
+
+// PR 24914
+struct StructPR24914{
+  int x;
+};
+
+void takesConstStructArgument(const StructPR24914&);
+void captureStructReference(const StructPR24914& s) {
+  [s]() {
+takesConstStructArgument(s);
+  }();
+}
+
+
 // CHECK: [B2 (ENTRY)]
 // CHECK:   Succs (1): B1
 // CHECK: [B1]


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


r253158 - Fix a layering oddity by passing Sema to DeclSpec::Finish instead of DiagnosticsEngine and Preprocessor. Everything the preprocessor was being used for can be acquired from Sema.

2015-11-14 Thread Craig Topper via cfe-commits
Author: ctopper
Date: Sat Nov 14 21:32:11 2015
New Revision: 253158

URL: http://llvm.org/viewvc/llvm-project?rev=253158&view=rev
Log:
Fix a layering oddity by passing Sema to DeclSpec::Finish instead of 
DiagnosticsEngine and Preprocessor. Everything the preprocessor was being used 
for can be acquired from Sema.

Modified:
cfe/trunk/include/clang/Sema/DeclSpec.h
cfe/trunk/lib/Parse/ParseDecl.cpp
cfe/trunk/lib/Parse/ParseExprCXX.cpp
cfe/trunk/lib/Sema/DeclSpec.cpp

Modified: cfe/trunk/include/clang/Sema/DeclSpec.h
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/DeclSpec.h?rev=253158&r1=253157&r2=253158&view=diff
==
--- cfe/trunk/include/clang/Sema/DeclSpec.h (original)
+++ cfe/trunk/include/clang/Sema/DeclSpec.h Sat Nov 14 21:32:11 2015
@@ -41,14 +41,12 @@ namespace clang {
   class CXXRecordDecl;
   class TypeLoc;
   class LangOptions;
-  class DiagnosticsEngine;
   class IdentifierInfo;
   class NamespaceAliasDecl;
   class NamespaceDecl;
   class NestedNameSpecifier;
   class NestedNameSpecifierLoc;
   class ObjCDeclSpec;
-  class Preprocessor;
   class Sema;
   class Declarator;
   struct TemplateIdAnnotation;
@@ -744,8 +742,7 @@ public:
   /// Finish - This does final analysis of the declspec, issuing diagnostics 
for
   /// things like "_Imaginary" (lacking an FP type).  After calling this 
method,
   /// DeclSpec is guaranteed self-consistent, even if an error occurred.
-  void Finish(DiagnosticsEngine &D, Preprocessor &PP,
-  const PrintingPolicy &Policy);
+  void Finish(Sema &S, const PrintingPolicy &Policy);
 
   const WrittenBuiltinSpecs& getWrittenBuiltinSpecs() const {
 return writtenBS;

Modified: cfe/trunk/lib/Parse/ParseDecl.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseDecl.cpp?rev=253158&r1=253157&r2=253158&view=diff
==
--- cfe/trunk/lib/Parse/ParseDecl.cpp (original)
+++ cfe/trunk/lib/Parse/ParseDecl.cpp Sat Nov 14 21:32:11 2015
@@ -2671,7 +2671,7 @@ void Parser::ParseDeclarationSpecifiers(
 
   // If this is not a declaration specifier token, we're done reading decl
   // specifiers.  First verify that DeclSpec's are consistent.
-  DS.Finish(Diags, PP, Policy);
+  DS.Finish(Actions, Policy);
   return;
 
 case tok::l_square:
@@ -4821,7 +4821,7 @@ void Parser::ParseTypeQualifierListOpt(D
   DoneWithTypeQuals:
   // If this is not a type-qualifier token, we're done reading type
   // qualifiers.  First verify that DeclSpec's are consistent.
-  DS.Finish(Diags, PP, Actions.getASTContext().getPrintingPolicy());
+  DS.Finish(Actions, Actions.getASTContext().getPrintingPolicy());
   if (EndLoc.isValid())
 DS.SetRangeEnd(EndLoc);
   return;

Modified: cfe/trunk/lib/Parse/ParseExprCXX.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseExprCXX.cpp?rev=253158&r1=253157&r2=253158&view=diff
==
--- cfe/trunk/lib/Parse/ParseExprCXX.cpp (original)
+++ cfe/trunk/lib/Parse/ParseExprCXX.cpp Sat Nov 14 21:32:11 2015
@@ -1821,7 +1821,7 @@ void Parser::ParseCXXSimpleTypeSpecifier
 DS.SetRangeEnd(Tok.getAnnotationEndLoc());
 ConsumeToken();
 
-DS.Finish(Diags, PP, Policy);
+DS.Finish(Actions, Policy);
 return;
   }
 
@@ -1877,12 +1877,12 @@ void Parser::ParseCXXSimpleTypeSpecifier
   case tok::annot_decltype:
   case tok::kw_decltype:
 DS.SetRangeEnd(ParseDecltypeSpecifier(DS));
-return DS.Finish(Diags, PP, Policy);
+return DS.Finish(Actions, Policy);
 
   // GNU typeof support.
   case tok::kw_typeof:
 ParseTypeofSpecifier(DS);
-DS.Finish(Diags, PP, Policy);
+DS.Finish(Actions, Policy);
 return;
   }
   if (Tok.is(tok::annot_typename))
@@ -1890,7 +1890,7 @@ void Parser::ParseCXXSimpleTypeSpecifier
   else
 DS.SetRangeEnd(Tok.getLocation());
   ConsumeToken();
-  DS.Finish(Diags, PP, Policy);
+  DS.Finish(Actions, Policy);
 }
 
 /// ParseCXXTypeSpecifierSeq - Parse a C++ type-specifier-seq (C++
@@ -1906,7 +1906,7 @@ void Parser::ParseCXXSimpleTypeSpecifier
 ///
 bool Parser::ParseCXXTypeSpecifierSeq(DeclSpec &DS) {
   ParseSpecifierQualifierList(DS, AS_none, DSC_type_specifier);
-  DS.Finish(Diags, PP, Actions.getASTContext().getPrintingPolicy());
+  DS.Finish(Actions, Actions.getASTContext().getPrintingPolicy());
   return false;
 }
 

Modified: cfe/trunk/lib/Sema/DeclSpec.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/DeclSpec.cpp?rev=253158&r1=253157&r2=253158&view=diff
==
--- cfe/trunk/lib/Sema/DeclSpec.cpp (original)
+++ cfe/trunk/lib/Sema/DeclSpec.cpp Sat Nov 14 21:32:11 2015
@@ -19,7 +19,6 @@
 #include "clang/AST/TypeLoc.h"
 #include "clang/Basic/LangOptions.h"
 #include "