Re: [PATCH] IPA REF: alias refactoring

2014-06-28 Thread Jan Hubicka
 Hi,
 this patch enhances alias manipulation for symtab_node. Honza suggested 
 following changes.
 
 Patch is pre approved, will be committed if no comments and regressions.
 Bootstrapped on x86_64-pc-linux-gnu, regression tests have been running.
 
 Thanks,
 Martin
 
 gcc/ChangeLog:
 
 * cgraph.h (iterate_direct_aliases): New function.
 (FOR_EACH_ALIAS): New macro iterates all direct aliases for a node.
 * cgraph.c (cgraph_for_node_thunks_and_aliases): Usage of
 FOR_EACH_ALIAS added.
 (cgraph_for_node_and_aliases): Likewise.
 * cgraphunit.c (assemble_thunks_and_aliases): Likewise.
 * ipa-inline.c (reset_edge_caches): Likewise.
 (update_caller_keys): Likewise.
 * trans-mem.c (ipa_tm_execute): Likewise.
 *varpool.c (varpool_analyze_node): Likewise.
 (varpool_for_node_and_aliases): Likewise.
 * ipa-ref.h (first_referring_alias): New function.
 (last_referring_alias): Likewise.

I missed it last time around, I think first_alias/last_alias are better names.
first_alias is unused. If you added it I guess FOR_EACH_ALIAS should use it.

We probably also can bring has_aliases_p inline and implement it using
first_referring_alias.

 +  /* If deleted item is IPA_REF_ALIAS, we have to move last
 +  item of IPA_REF_LIST type to the deleted position. After that
 +  we replace last node with deletion slot.  */
 +  struct ipa_ref *last_alias = list-last_referring_alias ();

You can avoid walking to last alias when the removed item is not IPA_REF_ALIAS.

 +
 +  /* IPA_REF_ALIAS is always put at the beginning of the list.   */
inserted?

OK with these changes (or if you already comitted, just do them incrementally)

Honza


Re: [PR 61424] std::regex matches right to left, not leftmost longest

2014-06-28 Thread Tim Shen
On Tue, Jun 10, 2014 at 1:56 PM, Tim Shen timshe...@gmail.com wrote:
 On Tue, Jun 10, 2014 at 9:54 AM, Jonathan Wakely jwak...@redhat.com wrote:
 I'm sure this is because I still don't understand all the regex code,
 but doesn't this change mean that for an extended mode regex with
 backrefs, the user could define _GLIBCXX_REGEX_USE_THOMPSON_NFA and
 backrefs wouldn't work?

 Sorry I missed that basic POSIX (BRE) has back-references (damn!), but
 extended POSIX (ERE) doesn't. So it should look like:
 -  if (!__re._M_automaton-_M_has_backref
 +  if (!(__re._M_automaton-_M_has_backref || (__re._M_flags 
 regex_constants::ECMAScript))
 ...and all deleted _M_has_backref lines should be undeleted.

 This patch is a temporary (I'm not sure how long though) workaround;
 BFS's support for ECMAScript with no back-references shall be done
 finally.

Sorry for late; this is the complete patch.

Bootstrapped and tested.

Thanks!


-- 
Regards,
Tim Shen
commit 10c1e55884525ff4c3ad959d29181b85966630c1
Author: Tim Shen tims...@google.com
Date:   Fri Jun 27 19:24:29 2014 -0700

PR libstdc++/61424
* include/bits/regex.tcc (__regex_algo_impl): Use DFS for ECMAScript,
not just regex containing back-references.
* include/bits/regex_compiler.tcc (_Compiler::_M_disjunction):
exchange _M_next and _M_alt for alternative operator,
making matching from left to right.
* include/bits/regex_executor.h (_State_info::_M_get_sol_pos):
Add position tracking fom DFS.
* include/bits/regex_executor.tcc (_Executor::_M_main_dispatch,
_Executor::_M_dfs): Likewise.
* include/bits/regex_scanner.h: Remove unused enum entry.
* testsuite/28_regex/algorithms/regex_search/61424.cc: New
testcase from PR.

diff --git a/libstdc++-v3/include/bits/regex.tcc 
b/libstdc++-v3/include/bits/regex.tcc
index a81f517..3322379 100644
--- a/libstdc++-v3/include/bits/regex.tcc
+++ b/libstdc++-v3/include/bits/regex.tcc
@@ -71,6 +71,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   // _GLIBCXX_REGEX_USE_THOMPSON_NFA if they need to use this approach.
   bool __ret;
   if (!__re._M_automaton-_M_has_backref
+  !(__re._M_flags  regex_constants::ECMAScript)
 #ifndef _GLIBCXX_REGEX_USE_THOMPSON_NFA
   __policy == _RegexExecutorPolicy::_S_alternate
 #endif
diff --git a/libstdc++-v3/include/bits/regex_compiler.tcc 
b/libstdc++-v3/include/bits/regex_compiler.tcc
index 0df10cc..f15f7dd 100644
--- a/libstdc++-v3/include/bits/regex_compiler.tcc
+++ b/libstdc++-v3/include/bits/regex_compiler.tcc
@@ -103,9 +103,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
  auto __end = _M_nfa._M_insert_dummy();
  __alt1._M_append(__end);
  __alt2._M_append(__end);
+ // __alt2 is state._M_next, __alt1 is state._M_alt. The executor
+ // executes _M_alt before _M_next, as well as executing left
+ // alternative before right one.
  _M_stack.push(_StateSeqT(_M_nfa,
-  _M_nfa._M_insert_alt(__alt1._M_start,
-   __alt2._M_start, false),
+  _M_nfa._M_insert_alt(__alt2._M_start,
+   __alt1._M_start, false),
   __end));
}
 }
diff --git a/libstdc++-v3/include/bits/regex_executor.h 
b/libstdc++-v3/include/bits/regex_executor.h
index 1991c00..e02fa65 100644
--- a/libstdc++-v3/include/bits/regex_executor.h
+++ b/libstdc++-v3/include/bits/regex_executor.h
@@ -173,6 +173,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
  void _M_queue(_StateIdT __i, const _ResultsVec __res)
  { _M_match_queue.emplace_back(__i, __res); }
 
+ _BiIter* _M_get_sol_pos() { return nullptr; }
+
  // Saves states that need to be considered for the next character.
  vectorpair_StateIdT, _ResultsVec  _M_match_queue;
  // Indicates which states are already visited.
@@ -191,12 +193,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
  // Dummy implementations for DFS mode.
  bool _M_visited(_StateIdT) const { return false; }
  void _M_queue(_StateIdT, const _ResultsVec) { }
+ _BiIter* _M_get_sol_pos() { return _M_sol_pos; }
 
  // To record current solution.
  _StateIdT _M_start;
+ _BiIter   _M_sol_pos;
};
 
-
 public:
   _ResultsVec   _M_cur_results;
   _BiIter   _M_current;
diff --git a/libstdc++-v3/include/bits/regex_executor.tcc 
b/libstdc++-v3/include/bits/regex_executor.tcc
index aefa8f4..38b8ff2 100644
--- a/libstdc++-v3/include/bits/regex_executor.tcc
+++ b/libstdc++-v3/include/bits/regex_executor.tcc
@@ -82,6 +82,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 _M_main_dispatch(_Match_mode __match_mode, __dfs)
 {
   _M_has_sol = false;
+  

Re: [PR 61424] std::regex matches right to left, not leftmost longest

2014-06-28 Thread Jonathan Wakely

On 28/06/14 00:18 -0700, Tim Shen wrote:

diff --git a/libstdc++-v3/include/bits/regex_executor.h 
b/libstdc++-v3/include/bits/regex_executor.h
index 1991c00..e02fa65 100644
--- a/libstdc++-v3/include/bits/regex_executor.h
+++ b/libstdc++-v3/include/bits/regex_executor.h
@@ -173,6 +173,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
  void _M_queue(_StateIdT __i, const _ResultsVec __res)
  { _M_match_queue.emplace_back(__i, __res); }

+ _BiIter* _M_get_sol_pos() { return nullptr; }
+
  // Saves states that need to be considered for the next character.
  vectorpair_StateIdT, _ResultsVec  _M_match_queue;
  // Indicates which states are already visited.
@@ -191,12 +193,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
  // Dummy implementations for DFS mode.
  bool _M_visited(_StateIdT) const { return false; }
  void _M_queue(_StateIdT, const _ResultsVec) { }
+ _BiIter* _M_get_sol_pos() { return _M_sol_pos; }


Please put a space above this new function, otherwise it looks like
the Dummy implementations comment applies to this function, but in
fact that function is used for dfs mode.

Similarly, maybe there should be a Dummy implementation comment on
the _State_info__bfs, RV::_M_get_sol_pos function.

OK with that change, thanks for the fix.



Re: [Patch, PR 61061] Add state limit for regex NFA

2014-06-28 Thread Jonathan Wakely

On 27/06/14 09:53 -0700, Tim Shen wrote:

On Fri, Jun 27, 2014 at 12:37 AM, Paolo Carlini
paolo.carl...@oracle.com wrote:

The actual patch is missing.. ;)


Sigh...every time. Sorry.


PS: sorry for being distracted by other issues: what happened to the other
regex issue? I think we are simply going to apply, when ready, your more
complete fix, right?


The problem given in the other PR (PR 61582) is also solved by this
patch (but I forgot to mention that); They are all examples like
nested range quantifiers.


OK for trunk, thanks.

I wonder if it would be better to use a sorted
vectorpair_StateIdT,_StateIdT instead of a map, for improved
memory footprint and runtime speed, but that can be changed later.


Re: [patch] change specific int128 - generic intN

2014-06-28 Thread Marc Glisse
(oups, the message got stuck in my mailer, should have been sent a while 
ago)


On Tue, 24 Jun 2014, DJ Delorie wrote:


Since the check for __STRICT_ANSI__ is removed, do we need to add
__extension__ in front of __GLIBCXX_TYPE_INT_N_0 to avoid warning with
-Wsystem-headers?


I copied the code from the __int128 case, and it explicitly bypassed
-Wsystem-headers...  so we don't have that problem.


Ah... indeed.


That seems complicated. You just need to call emit_support_tinfo_1 on
each of the types (see how fundamentals is used at the end of the
function), no need to put everything in the array.


Sure, *now* you tell me that :-)


Sorry, I should have made that clearer when I introduced 
emit_support_tinfo_1...



I can do it either way, but it's the same overhead to iterate through
the types.  Shoving it into the array is a bit more future-proof, but
keeping the index in sync is a bit of work if the table ever changes.


We are already going to have a second loop, not on the fundamentals array, 
calling emit_support_tinfo_1 for __float128 when available, so the array 
won't be complete anymore. More precisely, it will iterate either on all 
the types on which register_builtin_type was called or on float modes that 
don't correspond to float/double/long double (depends on how much they 
break ARM).



Your choice ;-)


Well, Jason's.

--
Marc Glisse


[wwwdocs] Convert links to http://gcc.gnu.org/wiki to https

2014-06-28 Thread Gerald Pfeifer
Applied.

Gerald

Index: lists.html
===
RCS file: /cvs/gcc/wwwdocs/htdocs/lists.html,v
retrieving revision 1.108
diff -u -r1.108 lists.html
--- lists.html  27 Jun 2014 11:48:45 -  1.108
+++ lists.html  28 Jun 2014 08:05:33 -
@@ -94,7 +94,7 @@
 
   liba href=https://gcc.gnu.org/ml/jit/;jit/a/b
   is for discussion and development of
-  a href=http://gcc.gnu.org/wiki/JIT;libgccjit/a, an experimental
+  a href=https://gcc.gnu.org/wiki/JIT;libgccjit/a, an experimental
   library for implementing Just-In-Time compilation using GCC as a back end.
   The list is intended for both users and developers of the library.
   Patches for the jit branch should go to both this list and
Index: news.html
===
RCS file: /cvs/gcc/wwwdocs/htdocs/news.html,v
retrieving revision 1.142
diff -u -r1.142 news.html
--- news.html   28 Jun 2014 07:45:05 -  1.142
+++ news.html   28 Jun 2014 08:05:34 -
@@ -84,7 +84,7 @@
 
 dtspanGCC now uses C++ as its implementation language/span
 span class=date[2012-08-14]/span/dt
-ddThe a href=http://gcc.gnu.org/wiki/cxx-conversion;cxx-conversion/a
+ddThe a href=https://gcc.gnu.org/wiki/cxx-conversion;cxx-conversion/a
 branch has been merged into trunk.  This switches GCC's implementation
 language from C to a href=codingconventions.html#Cxx_ConventionsC++/a.
 Additionally, some data structures have been re-implemented in C++
@@ -125,7 +125,7 @@
 
 dtspanAtomic memory model support/span
 span class=date[2011-11-06]/span/dt
-ddC++11/C11 a href=http://gcc.gnu.org/wiki/Atomic/GCCMM;memory model/a
+ddC++11/C11 a href=https://gcc.gnu.org/wiki/Atomic/GCCMM;memory model/a
 support has been added through a new set of built-in code__atomic/code
 functions.  Code was contributed by Andrew MacLeod, Richard Henderson, and
 Aldy Hernandez, all of Red Hat, Inc. 
@@ -135,14 +135,14 @@
 span class=date[2011-11-18]/span/dt
 ddIUUK (Computer Science Institute, Charles University), CE-ITI
 (Institute for Theoretical Computer Science) and Google are organizing
-a a href=http://gcc.gnu.org/wiki/cauldron2012;workshop for GNU
+a a href=https://gcc.gnu.org/wiki/cauldron2012;workshop for GNU
 Tools developers/a.  The workshop will be held in July 2012 at
 Charles University, Prague./dd
 
 dtspanTransactional memory support/span
 span class=date[2011-11-15]/span/dt
 ddAn implementation of the
-ongoing a href=http://gcc.gnu.org/wiki/TransactionalMemory;transactional
+ongoing a href=https://gcc.gnu.org/wiki/TransactionalMemory;transactional
 memory/a standard has been added.  Code was contributed by Richard
 Henderson, Aldy Hernandez, and Torvald Riegel, all of Red Hat, Inc.
 The project was partially funded by
@@ -154,7 +154,7 @@
 dtspanPOWER7 on the GCC Compile Farm/span
 span class=date[2011-11-10]/span/dt
 ddIBM has donated a 64 processor POWER7 machine (3.55 GHz, 64 GB RAM)
-to the a href=http://gcc.gnu.org/wiki/CompileFarm;GCC Compile Farm
+to the a href=https://gcc.gnu.org/wiki/CompileFarm;GCC Compile Farm
 project/a.  Hosting is donated by the OSU Open Source Lab./dd
 
 dtspanEpiphany processor support/span
@@ -283,7 +283,7 @@
 dda href=gcc-4.4/GCC 4.4.2/a has been released./dd
 
 dtOctober 3, 2009/dt
-ddThe a href=http://gcc.gnu.org/wiki/LinkTimeOptimization;LTO/a
+ddThe a href=https://gcc.gnu.org/wiki/LinkTimeOptimization;LTO/a
 branch has been merged into trunk.  The next release of GCC will
 feature a new whole-program optimizer, able to perform interprocedural
 optimizations across different files, even if they are written in
@@ -302,7 +302,7 @@
 
 dtMay 6, 2009/dt
 ddGCC can now be extended using a generic a
-href=http://gcc.gnu.org/wiki/plugins-branch;plugin framework/a on host
+href=https://gcc.gnu.org/wiki/plugins-branch;plugin framework/a on host
 platforms that support dynamically loadable objects./dd
 
 dtApril 21, 2009/dt
@@ -345,7 +345,7 @@
 dtMay 22, 2008/dt
 ddAMD Developer Central has donated two bi-quad core machines with
 the latest AMD Opteron 8354 Barcelona B3 processors and 16GB of RAM
-to the a href=http://gcc.gnu.org/wiki/CompileFarm;GCC Compile Farm
+to the a href=https://gcc.gnu.org/wiki/CompileFarm;GCC Compile Farm
 project/a for use by free software developers.  Hosting is donated
 by INRIA Saclay./dd
 
@@ -443,7 +443,7 @@
 GCC/a./dd
 
 dtJanuary 5, 2007/dt
-dda href=http://gcc.gnu.org/wiki/mem-ssa;Memory SSA/a, a new
+dda href=https://gcc.gnu.org/wiki/mem-ssa;Memory SSA/a, a new
 representation for memory expressions in SSA form has been contributed
 by Diego Novillo of Red Hat.  This new mechanism improves a
 href=https://gcc.gnu.org/ml/gcc-patches/2006-12/msg00436.html;compile-times
@@ -532,7 +532,7 @@
 New DECL hierarchy.
 
 More information about these projects can be found at 
-a href=http://gcc.gnu.org/wiki/GCC_4.1_Projects;GCC 4.1 projects/a.
+a href=https://gcc.gnu.org/wiki/GCC_4.1_Projects;GCC 4.1 projects/a.
 

Re: [Patch, AArch64] Restructure arm_neon.h vector types' implementation.

2014-06-28 Thread Marc Glisse

On Mon, 23 Jun 2014, Tejas Belagod wrote:

Here is a patch that restructures neon builtins to use vector types based on 
standard base types. We previously defined arm_neon.h's neon vector 
types(int8x8_t) using gcc's front-end vector extensions. We now move away 
from that and use types built internally(e.g. __Int8x8_t). These internal 
types names are defined by the AAPCS64 and we build arm_neon.h's public 
vector types over these internal types. e.g.


 typedef __Int8x8_t int8x8_t;

as opposed to

 typedef __builtin_aarch64_simd_qi int8x8_t
   __attribute__ ((__vector_size__ (8)));

Impact on mangling:

This patch does away with these builtin scalar types that the vector types 
were based on. These were previously used to look up mangling names. We now 
use the internal vector type names(e.g. __Int8x8_t) to lookup mangling for 
the arm_neon.h-exported vector types. There are a few internal scalar 
types(__builtin_aarch64_simd_oi etc.) that is needed to efficiently implement 
some NEON Intrinsics. These will be declared in the back-end and registered 
in the front-end and aarch64-specific builtin types, but are not 
user-visible. These, along with a few scalar __builtin types that aren't 
user-visible will have implementation-defined mangling. Because we don't have 
strong-typing across all builtins yet, we still have to maintain the old 
builtin scalar types - they will be removed once we move over to a 
strongly-typed builtin system implemented by the qualifier infrastructure.


Marc Glisse's patch in this thread exposed this issue 
https://gcc.gnu.org/ml/gcc-patches/2014-04/msg00618.html. I've tested my 
patch with the change that his patch introduced, and it seems to work fine - 
specifically these two lines:


+  for (tree t = registered_builtin_types; t; t = TREE_CHAIN (t))
+emit_support_tinfo_1 (TREE_VALUE (t));


If you still have that build somewhere, could you try:
nm -C libsupc++.a | grep typeinfo
and check how much your builtins appear there? With my patch you may have 
half-floats in addition to what you get without the patch (I think that's 
a good thing), but I hope not too much more...


Thanks for working on this,

--
Marc Glisse


[commit] Fix ABI fallout (Re: wide-int, rs6000)

2014-06-28 Thread Ulrich Weigand
Mike Stump wrote:

   (rs6000_aggregate_candidate): Use wide-int interfaces.
[snip]
 - /* Can't handle incomplete types.  */
 - if (!COMPLETE_TYPE_P (type))
 -   return -1;
 + /* Can't handle incomplete types nor sizes that are not
 +fixed.  */
 + if (!COMPLETE_TYPE_P (type)
 + || TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
 

This patch introduced an accidental change: the return -1; line was
deleted.  This influences certain ABI decisions, e.g. whether a union
of two vector types is supposed to be passed in a VR or in GPRs.
(Noticed by running the ABI compatibility test suite.)

Fortunately, this bug never made it into any (FSF or distribtion)
GCC release, so we can simply fix it now without introducing any
incompatibilities ...

I've checked in the following patch as obvious.

Bye,
Ulrich


ChangeLog:

2014-06-28  Ulrich Weigand  ulrich.weig...@de.ibm.com

* config/rs6000/rs6000.c (rs6000_aggregate_candidate): Revert
accidental change due to wide-int branch merge.

Index: gcc/config/rs6000/rs6000.c
===
--- gcc/config/rs6000/rs6000.c  (revision 212069)
+++ gcc/config/rs6000/rs6000.c  (working copy)
@@ -8766,6 +8766,7 @@
   fixed.  */
if (!COMPLETE_TYPE_P (type)
|| TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
+ return -1;
 
for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
  {

-- 
  Dr. Ulrich Weigand
  GNU/Linux compilers and toolchain
  ulrich.weig...@de.ibm.com



[wwwdocs] Make five links relative

2014-06-28 Thread Gerald Pfeifer
This is the right thing in general (considering mirror sites like
http://www.gnu.org/software/gcc/) and the fact that we know do not
need to convert these from http to https confirms that point.

It also shows that mass converting the entire wwwdocs tree in a
single step would not have been ideal.

Applied.

Gerald

Index: branching.html
===
RCS file: /cvs/gcc/wwwdocs/htdocs/branching.html,v
retrieving revision 1.31
diff -u -r1.31 branching.html
--- branching.html  2 Mar 2012 14:27:48 -   1.31
+++ branching.html  28 Jun 2014 10:29:55 -
@@ -64,7 +64,7 @@
 
 lia href=translation.html#regenRegenerate
 codegcc.pot/code/a and codecpplib.pot/code.
-a href=http://gcc.gnu.org/translation.html#submit;Send them
+a href=translation.html#submitSend them
 to the translation project/a if no snapshot of this version was sent
 during development stage 3 or 4./li
 
Index: lists.html
===
RCS file: /cvs/gcc/wwwdocs/htdocs/lists.html,v
retrieving revision 1.109
diff -u -r1.109 lists.html
--- lists.html  28 Jun 2014 08:14:40 -  1.109
+++ lists.html  28 Jun 2014 10:29:55 -
@@ -13,7 +13,7 @@
 --
 
 pThe GCC project has many mailing lists, which are archived on the web
-(and a href=http://gcc.gnu.org/lists.html#searchbox;searchable/a).
+(and a href=#searchboxsearchable/a).
 Please make yourself familiar with a href=#policiesour policies/a
 before a href=#subscribesubscribing/a and posting to these lists.
 /p
Index: news/profiledriven.html
===
RCS file: /cvs/gcc/wwwdocs/htdocs/news/profiledriven.html,v
retrieving revision 1.9
diff -u -r1.9 profiledriven.html
--- news/profiledriven.html 3 Dec 2013 01:04:42 -   1.9
+++ news/profiledriven.html 28 Jun 2014 10:29:56 -
@@ -85,7 +85,7 @@
 heuristics that expose common behavior of programs, for instance that
 loops usually loop more than once, pointers are non-null and integers
 usually positive.  The original predictor has been contributed by a
-href=http://gcc.gnu.org/news/reorder.html;Stan Cox and Jason
+href=reorder.htmlStan Cox and Jason
 Eckhardt for the basic block reordering pass/a.
 /p
 
Index: projects/cli.html
===
RCS file: /cvs/gcc/wwwdocs/htdocs/projects/cli.html,v
retrieving revision 1.24
diff -u -r1.24 cli.html
--- projects/cli.html   3 Dec 2013 01:11:52 -   1.24
+++ projects/cli.html   28 Jun 2014 10:29:56 -
@@ -361,7 +361,7 @@
 
   lipThe frontend would provide a way of producing native
   executables from CIL images, analogous to how the iGNU Compiler
-  for Java/i (a href=http://gcc.gnu.org/java/;GCJ/a) provides a
+  for Java/i (a href=../java/GCJ/a) provides a
   way to produce native executables from Java classes./p/li
 /ul
 
Index: testing/index.html
===
RCS file: /cvs/gcc/wwwdocs/htdocs/testing/index.html,v
retrieving revision 1.34
diff -u -r1.34 index.html
--- testing/index.html  28 Jun 2014 08:14:42 -  1.34
+++ testing/index.html  28 Jun 2014 10:29:56 -
@@ -48,7 +48,7 @@
   a href=http://gcc.gnu.org/install/test.html;Installing GCC:
   Testing/a for instructions on submitting test results./li
   liBuild cross compilers and test with simulators as described in
-  a href=http://gcc.gnu.org/simtest-howto.html;How to test GCC
+  a href=../simtest-howto.htmlHow to test GCC
   on a simulator/a./li
   liIf your system is beefy enough, do regular builds and test runs with
   RTL consistency checks enabled.  This slows the compiler down by an


Re: [i386] Replace builtins with vector extensions

2014-06-28 Thread Marc Glisse

Ping,

nobody has an opinion on this? Or some explanation why I am mistaken to 
believe that #pragma target makes it safer now?


It would enable a number of optimizations, like constant propagation, FMA 
contraction, etc. It would also allow us to remove several builtins.


On Sat, 17 May 2014, Marc Glisse wrote:


Ping

On Mon, 28 Apr 2014, Marc Glisse wrote:


Ping
http://gcc.gnu.org/ml/gcc-patches/2014-04/msg00590.html

(note that ARM seems to be doing the same thing for their neon intrinsics, 
see Ramana's patch series posted today)


On Fri, 11 Apr 2014, Marc Glisse wrote:


Hello,

the previous discussion on the topic was before we added all those #pragma 
target in *mmintrin.h:


http://gcc.gnu.org/ml/gcc-patches/2013-04/msg00374.html

I believe that removes a large part of the arguments against it. Note that 
I only did a few of the more obvious intrinsics, I am waiting to see if 
this patch is accepted before doing more.


Bootstrap+testsuite on x86_64-linux-gnu.

2014-04-11  Marc Glisse  marc.gli...@inria.fr

* config/i386/xmmintrin.h (_mm_add_ps, _mm_sub_ps, _mm_mul_ps,
_mm_div_ps, _mm_store_ss, _mm_cvtss_f32): Use vector extensions
instead of builtins.
* config/i386/emmintrin.h (_mm_store_sd, _mm_cvtsd_f64, _mm_storeh_pd,
_mm_cvtsi128_si64, _mm_cvtsi128_si64x, _mm_add_pd, _mm_sub_pd,
_mm_mul_pd, _mm_div_pd, _mm_storel_epi64, _mm_movepi64_pi64,
_mm_loadh_pd, _mm_loadl_pd): Likewise.
(_mm_sqrt_sd): Fix comment.


--
Marc Glisse


Re: [RFC PATCH] -fsanitize=nonnull and -fsanitize=returns-nonnull support

2014-06-28 Thread Gerald Pfeifer
On Fri, 27 Jun 2014, Jakub Jelinek wrote:
 This patch implements sanitization for nonnull and returns_nonnull
 attributes.

No documentation patch?

Also, should this be documented in gcc-4.10/changes.html?

 As GCC 4.9.0+ now aggressively optimizes based on these attributes and we've
 seen several issues in real world apps, I think this is really needed.

Nice!  Is this worth pushing into GCC 4.9.1 as well?

Gerald


[wwwdocs] http://gcc.gnu.org/install/ links

2014-06-28 Thread Gerald Pfeifer
Convert references to http://gcc.gnu.org/install/ and sub-pages to 
https.  Avoid some such links.

Committed.

Gerald

Index: faq.html
===
RCS file: /cvs/gcc/wwwdocs/htdocs/faq.html,v
retrieving revision 1.218
diff -u -r1.218 faq.html
--- faq.html28 Jun 2014 07:45:04 -  1.218
+++ faq.html28 Jun 2014 11:57:20 -
@@ -103,7 +103,7 @@
 pThe host/target specific installation notes for GCC include information
 about known problems with installing or using GCC on particular platforms.
 These are included in the sources for a release in INSTALL/specific.html,
-and the a href=http://gcc.gnu.org/install/specific.html;latest version/a
+and the a href=https://gcc.gnu.org/install/specific.html;latest version/a
 is always available at the GCC web site.
 Reports of a href=http://gcc.gnu.org/buildstat.html;successful builds/a
 for several versions of GCC are also available at the web site./p
@@ -217,7 +217,7 @@
 the GNU versions of those programs./p
 
 pTo ensure that GCC finds the GNU assembler (the GNU linker), which
-are required by a href=http://gcc.gnu.org/install/specific.html;some
+are required by a href=https://gcc.gnu.org/install/specific.html;some
 configurations/a,
 you should configure these with the same --prefix option as you used
 for GCC.  Then build amp; install GNU as (GNU ld) and proceed with
@@ -457,7 +457,7 @@
 transparently without requiring installation of any additional tools./p
 
 pIf you modified some sources or when building from SVN you may also
-need a href=http://gcc.gnu.org/install/prerequisites.html#TOC1;some
+need a href=https://gcc.gnu.org/install/prerequisites.html#TOC1;some
 additional tools/a./p
 
 
Index: releases.html
===
RCS file: /cvs/gcc/wwwdocs/htdocs/releases.html,v
retrieving revision 1.112
diff -u -r1.112 releases.html
--- releases.html   12 Jun 2014 12:47:25 -  1.112
+++ releases.html   28 Jun 2014 11:57:22 -
@@ -17,7 +17,7 @@
 of little use to you if you do not already have a C compiler on your
 machine./em  If you don't already have a compiler, you need pre-compiled
 binaries.
-Our a href=http://gcc.gnu.org/install/binaries.html;binaries page/a
+Our a href=https://gcc.gnu.org/install/binaries.html;binaries page/a
 has references to pre-compiled binaries for various platforms./p
 
 pYou can also retrieve the current development sources
Index: egcs-1.0/index.html
===
RCS file: /cvs/gcc/wwwdocs/htdocs/egcs-1.0/index.html,v
retrieving revision 1.3
diff -u -r1.3 index.html
--- egcs-1.0/index.html 3 Dec 2013 01:04:41 -   1.3
+++ egcs-1.0/index.html 28 Jun 2014 11:57:27 -
@@ -200,7 +200,7 @@
 pThe EGCS 1.0 releases include installation instructions in both HTML
 and plaintext forms (see the INSTALL directory in the toplevel directory
 of the distribution).  However, we also keep the most up to date
-a href=http://gcc.gnu.org/install/;installation instructions/a
+installation instructions
 and a href=buildstat.htmlbuild/test status/a on our web page.  We
 will update those pages as new information becomes available./p
 
Index: egcs-1.1/index.html
===
RCS file: /cvs/gcc/wwwdocs/htdocs/egcs-1.1/index.html,v
retrieving revision 1.7
diff -u -r1.7 index.html
--- egcs-1.1/index.html 28 Jun 2014 07:45:08 -  1.7
+++ egcs-1.1/index.html 28 Jun 2014 11:57:27 -
@@ -258,7 +258,7 @@
 pEach release includes installation instructions in both HTML
 and plaintext forms (see the INSTALL directory in the toplevel directory
 of the distribution).  However, we also keep the most up to date
-a href=http://gcc.gnu.org/install/;installation instructions /a
+installation instructions
 and a href=buildstat.htmlbuild/test status/a on our web page.  We
 will update those pages as new information becomes available./p
 
Index: gcc-2.95/index.html
===
RCS file: /cvs/gcc/wwwdocs/htdocs/gcc-2.95/index.html,v
retrieving revision 1.4
diff -u -r1.4 index.html
--- gcc-2.95/index.html 28 Jun 2014 07:45:10 -  1.4
+++ gcc-2.95/index.html 28 Jun 2014 11:57:28 -
@@ -43,8 +43,7 @@
 
 pThe sources include installation instructions in both HTML
 and plaintext forms in the codeinstall/code directory in the distribution.
-However, the most up to date
- a href=http://gcc.gnu.org/install/;installation instructions/a
+However, the most up to date installation instructions
 and a href=buildstat.htmlbuild/test status/a are on the web pages.  We
 will update those pages as new information becomes available./p
 
Index: gcc-3.0/buildstat.html
===
RCS file: /cvs/gcc/wwwdocs/htdocs/gcc-3.0/buildstat.html,v
retrieving revision 1.154
diff -u -r1.154 buildstat.html
--- 

Re: [wwwdocs] gcc-4.9/changes.html: Mention that LTO now generates slim objects

2014-06-28 Thread Gerald Pfeifer
On Fri, 21 Mar 2014, Tobias Burnus wrote:
 Thanks for the suggestions - updated patch below.

Here are two small tweaks I just committed on top of this.

Index: changes.html
===
RCS file: /cvs/gcc/wwwdocs/htdocs/gcc-4.9/changes.html,v
retrieving revision 1.71
retrieving revision 1.72
diff -u -r1.71 -r1.72
--- changes.html11 Jun 2014 18:49:26 -  1.71
+++ changes.html28 Jun 2014 12:37:43 -  1.72
@@ -80,13 +80,13 @@
  overall memory usage at link time./li
   liC++ hidden keyed methods can now be optimized out./li
   liWhen using a linker plugin, compiling with the code-flto/code
-  option now generates slim objects files (code.o/code) which only
+  option now generates slim object files (code.o/code) which only
   contain intermediate language representation for LTO. Use
   code-ffat-lto-objects/code to create files which contain
   additionally the object code.  To generate static libraries suitable
   for LTO processing, use codegcc-ar/code and
  codegcc-ranlib/code; to list symbols from a slim object file use
- codegcc-nm/code. (Requires that codear/code,
+ codegcc-nm/code. (This requires that codear/code,
  coderanlib/code and codenm/code have been compiled with
  plugin support.)/li
 /ul


Re: [Bug c++/60249] [c++11] Compiler goes into semi-infinite loop with wrong usage of user defined string literals

2014-06-28 Thread Ed Smith-Rowland

On 06/27/2014 05:39 PM, paolo.carlini at oracle dot com wrote:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60249

--- Comment #5 from Paolo Carlini paolo.carlini at oracle dot com ---
Patch looks *great*. If it works, please send it to mailing list ASAP.

I think I finally got these weird user-defined string literal bugs. 
Don't cross the streams!


Dr. Egon Spengler

PR C++/58781  https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58781  - Unicode 
strings broken in a strange way
PR C++/59867  https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59867  - Template 
string literal loses first symbol
PR C++/60249  https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60249  - Compiler 
goes into semi-infinite loop with wrong usage of user defined string literals
Plus I fixed an misleading error message for string literal operator templates 
(not available in C++11).

Built and tested clean on x86_64-linux.

OK?

I would also like to apply this to 4.9.

cp/

2014-06-28  Edward Smith-Rowland  3dw...@verizon.net

PR c++/58781
PR c++/60249
PR c++/59867
* parser.c (cp_parser_userdef_string_literal()): Take a tree
not a cp_token*. (cp_parser_string_literal(): Don't hack
the token stream!


testsuite/

2014-06-28  Edward Smith-Rowland  3dw...@verizon.net

PR c++/58781
PR c++/60249
PR c++/59867
* testsuite/g++.dg/cpp0x/pr58781.C: New.
* testsuite/g++.dg/cpp0x/pr60249.C: New.
* testsuite/g++.dg/cpp1y/pr59867.C: New.

Index: cp/parser.c
===
--- cp/parser.c (revision 211481)
+++ cp/parser.c (working copy)
@@ -1893,7 +1893,7 @@
 static tree cp_parser_userdef_char_literal
   (cp_parser *);
 static tree cp_parser_userdef_string_literal
-  (cp_token *);
+  (tree);
 static tree cp_parser_userdef_numeric_literal
   (cp_parser *);
 
@@ -3713,8 +3713,7 @@
{
  tree literal = build_userdef_literal (suffix_id, value,
OT_NONE, NULL_TREE);
- tok-u.value = literal;
- return cp_parser_userdef_string_literal (tok);
+ value = cp_parser_userdef_string_literal (literal);
}
 }
   else
@@ -3962,9 +3961,8 @@
as arguments.  */
 
 static tree
-cp_parser_userdef_string_literal (cp_token *token)
+cp_parser_userdef_string_literal (tree literal)
 {
-  tree literal = token-u.value;
   tree suffix_id = USERDEF_LITERAL_SUFFIX_ID (literal);
   tree name = cp_literal_operator_id (IDENTIFIER_POINTER (suffix_id));
   tree value = USERDEF_LITERAL_VALUE (literal);
@@ -23156,10 +23154,17 @@
ok = false;
}
   if (!ok)
-   error (literal operator template %qD has invalid parameter list.
-Expected non-type template argument pack char...
-   or typename CharT, CharT...,
-  decl);
+   {
+ if (cxx_dialect = cxx1y)
+   error (literal operator template %qD has invalid parameter list.
+Expected non-type template argument pack char...
+   or typename CharT, CharT...,
+  decl);
+ else
+   error (literal operator template %qD has invalid parameter list.
+Expected non-type template argument pack char...,
+  decl);
+   }
 }
   /* Register member declarations.  */
   if (member_p  !friend_p  decl  !DECL_CLASS_TEMPLATE_P (decl))
Index: testsuite/g++.dg/cpp0x/pr58781.C
===
--- testsuite/g++.dg/cpp0x/pr58781.C(revision 0)
+++ testsuite/g++.dg/cpp0x/pr58781.C(revision 0)
@@ -0,0 +1,18 @@
+// PR c++/58781
+// { dg-do compile { target c++11 } }
+
+#include cstddef
+
+int
+operator_s(const char32_t *a, size_t b)
+{
+  return 0;
+}
+
+int
+f()
+{
+  using a = decltype(U\x1181_s);
+  using b = decltype(U\x8111_s);
+  using c = decltype(U \x1181_s);
+}
Index: testsuite/g++.dg/cpp0x/pr60249.C
===
--- testsuite/g++.dg/cpp0x/pr60249.C(revision 0)
+++ testsuite/g++.dg/cpp0x/pr60249.C(revision 0)
@@ -0,0 +1,4 @@
+// PR c++/60249
+// { dg-do compile { target c++11 } }
+
+decltype(_) x;
Index: testsuite/g++.dg/cpp1y/pr59867.C
===
--- testsuite/g++.dg/cpp1y/pr59867.C(revision 0)
+++ testsuite/g++.dg/cpp1y/pr59867.C(revision 0)
@@ -0,0 +1,52 @@
+// PR c++/59867
+// { dg-do compile { target c++14 } }
+
+#include iostream
+using namespace std;
+
+// constant
+templatetypename T, T x
+  struct meta_value
+  {
+typedef meta_value type;
+typedef T value_type;
+static const T value = x;
+  };
+
+// array
+templatetypename T, T... data
+  struct meta_array
+  {
+typedef meta_array type;
+typedef T item_type;
+  };
+
+// static array - runtime array conversion utility
+templatetypename T
+  struct array_gen;
+
+templatetypename T, 

[c++-concepts] constraint association

2014-06-28 Thread Andrew Sutton
After merging from trunk this morning, I discovered that
DECL_SIZE_UNIT is now being used to store lists of specializations. I
had been using that to store template constraints. Oops.

This patch moves constraints outside the usual tree structures into an
association maintained in a hash table. It also lays the framework for
allowing constraints to be associated with any _*DECL node (templates,
functions, variables, types, etc).

Changelog below; committed as 212103.

2014-06-28  Andrew Sutton  andrew.n.sut...@gmail.com
* gcc/cp/cp-tree.h (DECL_CONSTRAINTS): Remove this macro; use
get_constraints instead.
(set_constraints): new.
* gcc/cp/cxx-pretty-print.c (pp_cxx_template_declaration): Use
get_constraints.
* gcc/cp/pt.c (get_specialization_constraints): Use get_constraints.
(build_template_decl): Use get_constraints.
(process_partial_specialization): Use get_constraints.
(add_inherited_template_parms): Use get_constraints.
(redeclare_class_template): Use get_constraints.
(is_compatible_template_arg): Use get_constraints.
(tsubst_friend_class): Use get_constraints.
(tsubst_decl): Uset get_constraints.
* gcc/cp/semantics.c (finish_template_template_parm): Use
get_constraints.
(fixup_template_type): Use get_constraints.
* gcc/cp/constraint.cc (constraints): New global association
of declarations to constraints.
(get_constraints): Return the associated constraints from the
hash table.
(set_constraints): New. Associate constraints with a declaration.
(check_template_constraints): Use get_constraints.
(equivalently_constrained): Use get_constraints.
(more_constrained): Use get_constraints.
(diagnose_constraints): Use get_constraints.
* gcc/testsuite/g++.dg/concepts/partial-spec.C: New.

Andrew
Index: gcc/cp/cxx-pretty-print.c
===
--- gcc/cp/cxx-pretty-print.c	(revision 212100)
+++ gcc/cp/cxx-pretty-print.c	(working copy)
@@ -2220,7 +2220,7 @@ pp_cxx_template_declaration (cxx_pretty_
   pp_newline_and_indent (pp, 3);
 }
 
-  if (tree c = DECL_CONSTRAINTS (t))
+  if (tree c = get_constraints (t))
 {
   pp_cxx_ws_string (pp, requires);
   pp-expression (CI_REQUIREMENTS (c));
Index: gcc/cp/pt.c
===
--- gcc/cp/pt.c	(revision 212101)
+++ gcc/cp/pt.c	(working copy)
@@ -846,7 +846,7 @@ get_specialization_constraints (tree typ
   // that type. If it is an explicit specialization, return null since
   // non-templates cannot be constrained.
   if (tree d = get_specializing_template_decl (type))
-return DECL_CONSTRAINTS (d);
+return get_constraints (d);
   else
 return NULL_TREE;
 }
@@ -4147,10 +4147,10 @@ build_template_decl (tree decl, tree par
 {
   tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
   DECL_TEMPLATE_PARMS (tmpl) = parms;
-  DECL_CONSTRAINTS (tmpl) = constr;
   DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
   DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
   DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
+  set_constraints (tmpl, constr);
 
   return tmpl;
 }
@@ -4319,7 +4319,7 @@ process_partial_specialization (tree dec
  arguments but different constraints. */
   tree main_type = TREE_TYPE (maintmpl);
   tree main_args = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (main_type));
-  tree main_constr = DECL_CONSTRAINTS (maintmpl);
+  tree main_constr = get_constraints (maintmpl);
   if (comp_template_args (inner_args, main_args)
equivalent_constraints (current_template_reqs, main_constr))
 error (partial specialization %qT does not specialize any 
@@ -5229,13 +5229,13 @@ add_inherited_template_parms (tree fn, t
   // If the inherited constructor was constrained, then also
   // propagate the constraints to the new declaration by
   // rewriting them in terms of the local template parameters.
-  tree cons = DECL_CONSTRAINTS (inherited);
+  tree cons = get_constraints (inherited);
   if (cons)
 {
   ++processing_template_decl;
   tree reqs = instantiate_requirements (CI_REQUIREMENTS (cons), args);
   --processing_template_decl;
-  DECL_CONSTRAINTS (tmpl) = make_constraints (reqs);
+  set_constraints (tmpl, make_constraints (reqs));
 }
 
   DECL_TEMPLATE_INFO (fn) = build_template_info (tmpl, args);
@@ -5354,7 +5354,7 @@ redeclare_class_template (tree type, tre
 }
 
   // Cannot redeclare a class template with a different set of constraints. 
-  if (!equivalent_constraints (DECL_CONSTRAINTS (tmpl), cons))
+  if (!equivalent_constraints (get_constraints (tmpl), cons))
 {
   error_at (input_location, redeclaration %q#D with different 
 constraints, tmpl);
@@ -6586,8 +6586,8 @@ is_compatible_template_arg (tree parm, t
 

Re: [fortran,patch] Binding label can be any initialisation expression

2014-06-28 Thread FX
ping*2


 ping
 
 To reinforce the message in my earlier email: we can fine-tune the list of 
 allowed characters in identifiers later, but I’d like to get this patch in 
 already (so it gets large exposure before the 4.10 release).
 
 FX
 
 
 
 Binding label can be any initialisation expression.  Well, only scalar 
 character of the default kind, but still…
 
 This patch achieves this goal by following the obvious plan, which has not 
 changed since I wrote it in PR 36275 in 2008 :)
 The custom matcher for binding label, in gfc_match_bind_c(), is removed and 
 the generic matcher gfc_match_init_expr() is called, followed by checks that 
 the expression obtained fulfills the constraints of a C identifier.
 
 So, now is the time to think about PR 38839 (what characters to allow as a 
 binding label): right now, I allow alphadecimals, underscore and dollar. 
 From the PR comments, it seems like @ and ` might be also allowed for 
 universal-character names, but they are not supported by GCC on platforms I 
 tested right now. Let me know what you think, but I don’t think we should 
 worry to much about it.
 
 Bootstrapped and regtested on x86_64-apple-darwin13, comes with testcases.
 OK to commit?
 
 FX



bind_c.diff
Description: Binary data


bind_c.ChangeLog
Description: Binary data


Re: [RFC PATCH] -fsanitize=nonnull and -fsanitize=returns-nonnull support

2014-06-28 Thread Jakub Jelinek
On Sat, Jun 28, 2014 at 01:29:47PM +0200, Gerald Pfeifer wrote:
 On Fri, 27 Jun 2014, Jakub Jelinek wrote:
  This patch implements sanitization for nonnull and returns_nonnull
  attributes.
 
 No documentation patch?

I'll add it soon.

 Also, should this be documented in gcc-4.10/changes.html?

We'll mention all the new undefined behavior sanitizers, there have been
many added already post 4.9.0.

  As GCC 4.9.0+ now aggressively optimizes based on these attributes and we've
  seen several issues in real world apps, I think this is really needed.
 
 Nice!  Is this worth pushing into GCC 4.9.1 as well?

This one is the only one that is actually hard to push into 4.9.x, as it
requires new libubsan entrypoints.

Jakub


Re: [v3] Tighten some config/abi/pre/gnu.ver patterns

2014-06-28 Thread Paolo Carlini

Hi,

On 06/08/2014 06:02 PM, Paolo Carlini wrote:

Hi,

as discussed, tested x86_64-linux multilib, committed.
for now I reverted this. Things get too complicated when we have to 
conditionally export some symbols depending on the target (see 
libstdc++/61536).


Thanks,
Paolo.


Re: [v3] Tighten some config/abi/pre/gnu.ver patterns

2014-06-28 Thread Marc Glisse

On Sat, 28 Jun 2014, Paolo Carlini wrote:

for now I reverted this. Things get too complicated when we have to 
conditionally export some symbols depending on the target (see 
libstdc++/61536).


A single extra symbol (for the unusual -O0 compilation) is better than 200 
before the patch though. I think the patch is a good thing (also for 
future-proofing) even if one or two extra symbols remain because they are 
hard to remove. Also, none of this is urgent, it can all wait several 
weeks if you are busy.


--
Marc Glisse


Re: [PATCH] Implement -fsanitize=bounds and internal calls in FEs

2014-06-28 Thread Gerald Pfeifer
On Fri, 20 Jun 2014, Marek Polacek wrote:
+@item -fsanitize=bounds
+@opindex fsanitize=bounds
+
+This option enables instrumentation of array bounds.  Various out of bounds
+accesses are detected.  Flexible array members are not instrumented, as well
+as initializers of variables with static storage.

Can you make this Flexible array members and initializers... (or
...as well as...)?  The current wording confused me a bit at first.

And I believe there should be no empty line after @opindex.

Gerald


[c++-concepts] Compiler options/bootstrap

2014-06-28 Thread Andrew Sutton
This patch restores C++98 as the default language in this branch and
disables -fconcepts by default. Using -std=c++1z will enable
-fconcepts.

I wanted to give an error if -fconcepts is used with dialect = cxx11,
but I didn't find the right place to put the check.

This also adds a new format specifier (Z) to the cxxdiag flags. That
warning was turning into an error in the bootstrap build. FYI: The
bootstrap builds cleanly for me now.

Committed in r212105.

2014-06-28  Andrew Sutton  andrew.n.sut...@gmail.com
* gcc/c-family/c.opt (flag_concepts): Don't enable by default.
* gcc/c-family/c-opts.c (set_std_cxx1z): Enable concepts if
-std=cxx1z is selected.
* gcc/c-family/c-format.c (gcc_cxxdia): Add Z as format specifier.
* gcc/cp/c-common.c (cxx_dialect): Make -std=c++98 the default
language again.
* gcc/cp/lex.c (cxx_init): Don't set flag_concepts explicitly.
* gcc/testsuite/g++.dg/concepts/*.C: Updat build flags.

Andrew


Re: [Patch, PR 61061] Add state limit for regex NFA

2014-06-28 Thread Tim Shen
On Sat, Jun 28, 2014 at 2:48 AM, Jonathan Wakely jwak...@redhat.com wrote:
 I wonder if it would be better to use a sorted
 vectorpair_StateIdT,_StateIdT instead of a map, for improved
 memory footprint and runtime speed, but that can be changed later.

In this case, we keep inserting (__m[__u] = __id) and looking up
(__m.count()) the container in a crossover order, which required a map
to minimize both's complexity.


-- 
Regards,
Tim Shen


[wwwdocs,Java] Remove five obsolete entries from java/faq.html

2014-06-28 Thread Gerald Pfeifer
REQUEST FOR HELP:  It would be great if one of the Java experts
could advise which further entries to remove or adjust.  I volunteer
to make the actual changes, if that helps.


Now to this patch: Working on the web pages in general, I noticed a 
number of obsolete FAQ entries in our Java FAQ.  Some of them are 
(better) covered in our general documentation, some of them refer 
to really old versions of GCC.

For example, x86-64 is not included in the supported platforms 
mentioned, one entry talks about version before 3.0,...

Applied.

Gerald

2014-06-28  Gerald Pfeifer  ger...@pfeifer.com

* faq.html: Remove five obsolete entries.

Index: faq.html
===
RCS file: /cvs/gcc/wwwdocs/htdocs/java/faq.html,v
retrieving revision 1.72
diff -u -r1.72 faq.html
--- faq.html28 Jun 2014 07:45:14 -  1.72
+++ faq.html28 Jun 2014 17:09:44 -
@@ -11,8 +11,6 @@
 lia href=#1_0General Questions/a 
   ol
 lia href=#1_1What license is used for libgcj?/a/li
-lia href=#1_3How can I contribute to libgcj/a/li
-lia href=#1_5Will gcj and libgcj work on my machine?/a/li
 lia href=#1_6How can I debug my Java program?/a/li
 lia href=#1_7Can I interface byte-compiled and native java 
code?/a/li
   /ol
@@ -32,12 +30,6 @@
 lia href=#2_8What features of the Java language are/arn't 
supported/a/li
   /ol
 /li
-lia href=#3_0Build Issues/a 
-  ol
-lia href=#3_1I need something more recent than the last 
release; how
-  should I build it?/a/li
-  /ol
-/li
 lia href=#4_0Gcj Compile/Link Questions/a 
   ol
 lia href=#4_1Why do I get ttundefined reference to 
`main'/tt 
@@ -48,8 +40,6 @@
 lia href=#4_4Where does GCJ look for files? /a/li
 lia href=#4_5How does gcj resolve wether to compile .class 
or 
   .java files? /a/li
-lia href=#4_6I'm getting link errors!/a/li
-lia href=#4_7I'm getting 'undefined symbol: 
__dso_handle'/a/li
   /ol
 /li
 lia href=#5_0Runtime Questions/a 
@@ -87,28 +77,6 @@
   /dl
   
   hr /
-  h3a name=1_31.3 How can I contribute to libgcj?/a/h3
-  dl 
-dd
-  You can send simple bug fixes in as patches. Please follow the a 
href=http://gcc.gnu.org/contribute.html;GCC 
-  guidelines for submitting patches/a. For more complex changes, you 
-  must sign copyright over to the Free Software Foundation. See the a 
href=contrib.htmlcontribution/a 
-  page for details.
-/dd
-  /dl
- 
-  hr /
-  h3a name=1_51.5 Will gcj and libgcj work on my machine?/a/h3
-  dl 
-dd
-  Gcj and libgcj are known to work more or less with IA-32 and 
-  SPARC Solaris, Tru64 Unix, as well as IA-32, IA-64, Alpha, and 
PowerPC 
-  Linux. They might work on other systems. Generally speaking, porting 
to a new 
-  system should not be hard. This would be a good way to volunteer.
-/dd
-  /dl
- 
-  hr /
   h3a name=1_61.6 How can I debug my Java program?/a/h3
   dl 
 dd
@@ -267,15 +235,6 @@
 /dd
   /dl
   
-  h2a name=3_0Build Issues/a/h2
-
-  h3a name=3_13.1 I need something more recent than the last 
release. 
-  How should I build it?/a/h3
-  dl 
-dd
-  Please read a href=build-snapshot.htmlhere/a.
-/dd
-  /dl
 
   h2a name=4_0Gcj Compile/Link Questions/a/h2
  
@@ -352,36 +311,6 @@
 /dd
   /dl
   
-  hr /
-  h3a name=4_64.6 I'm getting link errors/a/h3
-
-  dl
-dd
-  pIf you get errors at link time that refer to
-  'undefined reference to `java::lang::Object type_info function',
-  verify that you have compiled any CNI C++ files with the
-  -fno-rtti option. This is only required for versions of GCJ earlier 
-  than 3.0./p
-/dd
-  /dl
-
-  hr /
-  h3a name=4_74.7 I'm getting 'undefined symbol: 
__dso_handle'/a/h3
-  dl
-dd
-  pSome versions of the GNU linker have broken support for the 
'.hidden'
-  directive, which results in problems with shared libraries built with
-  recent versions of gcc. /p
-
-  pThere are three solutions: /p
-  ul
-lidowngrade to binutils that don't support .hidden at all,/li
-liupgrade to a recent binutils, or/li
-liundef the HAVE_GAS_HIDDEN definition in gcc's auto-host.h
-(and rebuild gcc)./li
-  /ul
-/dd
-  /dl
   
   h2a name=5_0Runtime Questions/a/h2
  


Fix representation of gcov_info_type

2014-06-28 Thread Jan Hubicka
Hi,
This is first bug noticed by the type consistency checks I added.

gcov_info_type is a structure that contains function pointer to itself.  While
building it we first build a structure w/o size and fields, then we build a
function type that produces a qualified variant of the structure (not sure why
that legwork is needed). Then we add fields via finish_builtin_struct.
It sets the fields to structure but not its variant and then does layout_type
that actually copies size to all variants. So we end up with TYPE_COMPLETE_P 
variant
that has size but no fields.  This is quite obviously wrong.

Fixed thus. Bootstrapped, lto-bootstrapped and regtested x86_64-linux, comitted.

* stor-layout.c (finish_builtin_struct): Copy fields into
the variants.

Index: stor-layout.c
===
--- stor-layout.c   (revision 212098)
+++ stor-layout.c   (working copy)
@@ -2065,7 +2065,7 @@ void
 finish_builtin_struct (tree type, const char *name, tree fields,
   tree align_type)
 {
-  tree tail, next;
+  tree tail, next, variant;
 
   for (tail = NULL_TREE; fields; tail = fields, fields = next)
 {
@@ -2074,6 +2074,10 @@ finish_builtin_struct (tree type, const
   DECL_CHAIN (fields) = tail;
 }
   TYPE_FIELDS (type) = tail;
+  for (variant = TYPE_MAIN_VARIANT (type);
+   variant != 0;
+   variant = TYPE_NEXT_VARIANT (variant))
+TYPE_FIELDS (variant) = tail;
 
   if (align_type)
 {


Fix ipa-devirt WRT type variants

2014-06-28 Thread Jan Hubicka
Hi,
this is another bug noticed.  Here ipa-devirt attempts to merge binfos of two 
representations
of the same ODR type, but forgets about variants.

I also noticed that using variant instead of the type may end up in incomplete 
type and/or
we may waste polymorphic call target cache by duplicated entries.  I made the 
contextes to
be always main variants thus.

Bootstrapped, lto-bootstrapped/regtested x86_64-linux, comitted.

* ipa-devirt.c (set_type_binfo): New function.
(add_type_duplicate): Use it.
(get_odr_type): Sanity check that binfos points to main variants.
(get_class_context): Be sure the context's outer_type is main variant.
(contains_type_p): Walk main variant.
(get_polymorphic_call_info_for_decl): Set outer_type to be main variant.
(get_polymorphic_call_info): Likewise.
(possible_polymorphic_call_targets): Sanity check that we operate on 
main
variant.
Index: ipa-devirt.c
===
--- ipa-devirt.c(revision 212098)
+++ ipa-devirt.c(working copy)
@@ -334,6 +334,17 @@ static odr_hash_type *odr_hash;
 static GTY(()) vec odr_type, va_gc *odr_types_ptr;
 #define odr_types (*odr_types_ptr)
 
+/* Set TYPE_BINFO of TYPE and its variants to BINFO.  */
+void
+set_type_binfo (tree type, tree binfo)
+{
+  for (; type; type = TYPE_NEXT_VARIANT (type))
+if (COMPLETE_TYPE_P (type))
+  TYPE_BINFO (type) = binfo;
+else
+  gcc_assert (!TYPE_BINFO (type));
+}
+
 /* TYPE is equivalent to VAL by ODR, but its tree representation differs
from VAL-type.  This may happen in LTO where tree merging did not merge
all variants of the same type.  It may or may not mean the ODR violation.
@@ -446,16 +457,17 @@ add_type_duplicate (odr_type val, tree t
{
  unsigned int i;
 
- TYPE_BINFO (val-type) = TYPE_BINFO (type);
+ set_type_binfo (val-type, TYPE_BINFO (type));
  for (i = 0; i  val-types-length (); i++)
{
  if (TYPE_BINFO ((*val-types)[i])
  == master_binfo)
-   TYPE_BINFO ((*val-types)[i]) = TYPE_BINFO (type);
+   set_type_binfo ((*val-types)[i], TYPE_BINFO (type));
}
+ BINFO_TYPE (TYPE_BINFO (type)) = val-type;
}
  else
-   TYPE_BINFO (type) = master_binfo;
+   set_type_binfo (type, master_binfo);
}
 }
 }
@@ -495,6 +507,7 @@ get_odr_type (tree type, bool insert)
 
   val = ggc_cleared_allocodr_type_d ();
   val-type = type;
+  gcc_assert (BINFO_TYPE (TYPE_BINFO (val-type)) = type);
   val-bases = vNULL;
   val-derived_types = vNULL;
   val-anonymous_namespace = type_in_anonymous_namespace_p (type);
@@ -1102,7 +1115,7 @@ get_class_context (ipa_polymorphic_call_
  if (!fld)
goto give_up;
 
- type = TREE_TYPE (fld);
+ type = TYPE_MAIN_VARIANT (TREE_TYPE (fld));
  offset -= pos;
  /* DECL_ARTIFICIAL represents a basetype.  */
  if (!DECL_ARTIFICIAL (fld))
@@ -1116,7 +1129,7 @@ get_class_context (ipa_polymorphic_call_
}
   else if (TREE_CODE (type) == ARRAY_TYPE)
{
- tree subtype = TREE_TYPE (type);
+ tree subtype = TYPE_MAIN_VARIANT (TREE_TYPE (type));
 
  /* Give up if we don't know array size.  */
  if (!tree_fits_shwi_p (TYPE_SIZE (subtype))
@@ -1159,7 +1172,8 @@ static bool
 contains_type_p (tree outer_type, HOST_WIDE_INT offset,
 tree otr_type)
 {
-  ipa_polymorphic_call_context context = {offset, outer_type,
+  ipa_polymorphic_call_context context = {offset,
+ TYPE_MAIN_VARIANT (outer_type),
  false, true};
   return get_class_context (context, otr_type);
 }
@@ -1272,7 +1286,7 @@ get_polymorphic_call_info_for_decl (ipa_
 {
   gcc_assert (DECL_P (base));
 
-  context-outer_type = TREE_TYPE (base);
+  context-outer_type = TYPE_MAIN_VARIANT (TREE_TYPE (base));
   context-offset = offset;
   /* Make very conservative assumption that all objects
  may be in construction. 
@@ -1329,7 +1343,7 @@ get_polymorphic_call_info (tree fndecl,
   *otr_token = tree_to_uhwi (OBJ_TYPE_REF_TOKEN (ref));
 
   /* Set up basic info in case we find nothing interesting in the analysis.  */
-  context-outer_type = *otr_type;
+  context-outer_type = TYPE_MAIN_VARIANT (*otr_type);
   context-offset = 0;
   base_pointer = OBJ_TYPE_REF_OBJECT (ref);
   context-maybe_derived_type = true;
@@ -1415,7 +1429,8 @@ get_polymorphic_call_info (tree fndecl,
   if (TREE_CODE (TREE_TYPE (fndecl)) == METHOD_TYPE
   SSA_NAME_VAR (base_pointer) == DECL_ARGUMENTS (fndecl))
{
- context-outer_type = TREE_TYPE (TREE_TYPE (base_pointer));
+ context-outer_type
+= TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE 

ipa-prop WRT type variants

2014-06-28 Thread Jan Hubicka
Hi,
this patch does similar change to ipa-prop as I did to ipa-devirt; it makes 
sure that
all the types in jump functions are main variants that reduces diversity in LTO 
streaming
and makes us less likely to hit incomplete types.

It also makes sure that the type change detection works on main variant because 
pointer
equality is used there for types.

Bootstrapped/regtested x86_64-linux, comitted.

* ipa-prop.c (ipa_set_jf_known_type): Record always the main variant
of the type.
(ipa_set_ancestor_jf) Likewise.
(check_stmt_for_type_change): Check that we work on main variant.
(detect_type_change): Look into main variant.
(compute_known_type_jump_func): Check that main variant has BINFO.
Index: ipa-prop.c
===
--- ipa-prop.c  (revision 212098)
+++ ipa-prop.c  (working copy)
@@ -438,6 +438,11 @@ static void
 ipa_set_jf_known_type (struct ipa_jump_func *jfunc, HOST_WIDE_INT offset,
   tree base_type, tree component_type)
 {
+  /* Recording and propagating main variants increases change that types
+ will match.  */
+  base_type = TYPE_MAIN_VARIANT (base_type);
+  component_type = TYPE_MAIN_VARIANT (component_type);
+
   gcc_assert (TREE_CODE (component_type) == RECORD_TYPE
   TYPE_BINFO (component_type));
   if (!flag_devirtualize)
@@ -529,6 +534,8 @@ ipa_set_ancestor_jf (struct ipa_jump_fun
 {
   if (!flag_devirtualize)
 type_preserved = false;
+  if (type)
+type = TYPE_MAIN_VARIANT (type);
   gcc_assert (!type_preserved
  || (TREE_CODE (type) == RECORD_TYPE
   TYPE_BINFO (type)
@@ -712,7 +720,9 @@ check_stmt_for_type_change (ao_ref *ao A
   if (stmt_may_be_vtbl_ptr_store (stmt))
 {
   tree type;
+
   type = extr_type_from_vtbl_ptr_store (stmt, tci);
+  gcc_assert (!type || TYPE_MAIN_VARIANT (type) == type);
   if (tci-type_maybe_changed
   type != tci-known_current_type)
tci-multiple_types_encountered = true;
@@ -749,10 +759,12 @@ detect_type_change (tree arg, tree base,
   /* Be sure expected_type is polymorphic.  */
   || !comp_type
   || TREE_CODE (comp_type) != RECORD_TYPE
-  || !TYPE_BINFO (comp_type)
-  || !BINFO_VTABLE (TYPE_BINFO (comp_type)))
+  || !TYPE_BINFO (TYPE_MAIN_VARIANT (comp_type))
+  || !BINFO_VTABLE (TYPE_BINFO (TYPE_MAIN_VARIANT (comp_type
 return true;
 
+  comp_type = TYPE_MAIN_VARIANT (comp_type);
+
   /* C++ methods are not allowed to change THIS pointer unless they
  are constructors or destructors.  */
   if (TREE_CODE(base) == MEM_REF
@@ -1408,8 +1420,8 @@ compute_known_type_jump_func (tree op, s
   /* Be sure expected_type is polymorphic.  */
   || !expected_type
   || TREE_CODE (expected_type) != RECORD_TYPE
-  || !TYPE_BINFO (expected_type)
-  || !BINFO_VTABLE (TYPE_BINFO (expected_type)))
+  || !TYPE_BINFO (TYPE_MAIN_VARIANT (expected_type))
+  || !BINFO_VTABLE (TYPE_BINFO (TYPE_MAIN_VARIANT (expected_type
 return;
 
   op = TREE_OPERAND (op, 0);


Re: [commit] Fix ABI fallout (Re: wide-int, rs6000)

2014-06-28 Thread Mike Stump
On Jun 28, 2014, at 3:31 AM, Ulrich Weigand uweig...@de.ibm.com wrote:
 Mike Stump wrote:
 
  (rs6000_aggregate_candidate): Use wide-int interfaces.
 [snip]
 -/* Can't handle incomplete types.  */
 -if (!COMPLETE_TYPE_P (type))
 -  return -1;
 +/* Can't handle incomplete types nor sizes that are not
 +   fixed.  */
 +if (!COMPLETE_TYPE_P (type)
 +|| TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)

Ouch, sorry.  At least 8 eyes missed it.  Does this fix the -m32 issue?

 I've checked in the following patch as obvious.

Thanks.


Re: [fixincludes] Fix iso/math_c99.h signbit on Solaris

2014-06-28 Thread Bruce Korb

On 06/26/14 02:18, Rainer Orth wrote:

Ok for mainline?


Could you please reformat the c_fix_arg's and test-text to be here strings a 
la:

c_fix_arg = - _EOS_
#undef  signbit
#define signbit(x)  (sizeof(x) == sizeof(float) \
\  ? __builtin_signbitf(x) \
\  : sizeof(x) == sizeof(long double) \
\? __builtin_signbitl(x) \
\: __builtin_signbit(x));
_EOS_;

I changed the here string thingy to eat that tab-backslash
and leave the rest of the tabs a few years ago.
That is considerably more readable than:

c_fix_arg = #undef\tsignbit\n
#define\tsignbit(x)\t(sizeof(x) == sizeof(float) \\\n
\t\t\t   ? __builtin_signbitf(x) \\\n
\t\t\t   : sizeof(x) == sizeof(long double) \\\n
\t\t\t ? __builtin_signbitl(x) \\\n
\t\t\t : __builtin_signbit(x));

and the other two are worse.  Thank you!


[objc++] Fix code setting binfo

2014-06-28 Thread Jan Hubicka
Hi,
this patch fixes similar bug as in ipa-devirt.  objc_xref_basetypes is used when
building obj-C++ structure.  The structure always contains self-reference that
builds type variant early.  The variant's binfo is one assigned by
C++ FE's version of xref_basetypes, while the main variant gets overwritten
here.  Fixed thus.

Honza

Bootstrapped/regtested x86_64-linux, comitted.

* objc-act.c (objc_xref_basetypes): Set TYPE_BINFO of type variants,
too.
Index: objc-act.c
===
--- objc-act.c  (revision 212098)
+++ objc-act.c  (working copy)
@@ -2695,12 +2695,16 @@ objc_copy_binfo (tree binfo)
 static void
 objc_xref_basetypes (tree ref, tree basetype)
 {
+  tree variant;
   tree binfo = make_tree_binfo (basetype ? 1 : 0);
-
   TYPE_BINFO (ref) = binfo;
   BINFO_OFFSET (binfo) = size_zero_node;
   BINFO_TYPE (binfo) = ref;
 
+  gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
+  for (variant = ref; variant; variant = TYPE_NEXT_VARIANT (variant))
+TYPE_BINFO (variant) = binfo;
+
   if (basetype)
 {
   tree base_binfo = objc_copy_binfo (TYPE_BINFO (basetype));


[wwwdocs] Migrate http://gcc.gnu.org/bugzilla/buglist.cgi to https

2014-06-28 Thread Gerald Pfeifer
Applied.

Richi, Jakub, I noticed that you seem to have stopped including those 
with GCC 4.7 and later.  Any particular reason?  It appears useful to 
me.

Gerald

Index: gcc-3.3/changes.html
===
RCS file: /cvs/gcc/wwwdocs/htdocs/gcc-3.3/changes.html,v
retrieving revision 1.60
diff -u -r1.60 changes.html
--- gcc-3.3/changes.html28 Jun 2014 07:45:11 -  1.60
+++ gcc-3.3/changes.html28 Jun 2014 19:51:09 -
@@ -1277,7 +1277,7 @@
 h2a name=3.3.4GCC 3.3.4/a/h2
 
 pThis is the a
-href=http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVEDamp;resolution=FIXEDamp;target_milestone=3.3.4;list
+href=https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVEDamp;resolution=FIXEDamp;target_milestone=3.3.4;list
 of problem reports (PRs)/a from GCC's bug tracking system that are
 known to be fixed in the 3.3.4 release. This list might not be
 complete (that is, it is possible that some PRs that have been fixed
@@ -1288,7 +1288,7 @@
 h2a name=3.3.5GCC 3.3.5/a/h2
 
 pThis is the a
-href=http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVEDamp;resolution=FIXEDamp;target_milestone=3.3.5;list
+href=https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVEDamp;resolution=FIXEDamp;target_milestone=3.3.5;list
 of problem reports (PRs)/a from GCC's bug tracking system that are
 known to be fixed in the 3.3.5 release. This list might not be
 complete (that is, it is possible that some PRs that have been fixed
@@ -1299,7 +1299,7 @@
 h2a name=3.3.6GCC 3.3.6/a/h2
 
 pThis is the a
-href=http://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVEDamp;resolution=FIXEDamp;target_milestone=3.3.6;list
+href=https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVEDamp;resolution=FIXEDamp;target_milestone=3.3.6;list
 of problem reports (PRs)/a from GCC's bug tracking system that are
 known to be fixed in the 3.3.6 release. This list might not be
 complete (that is, it is possible that some PRs that have been fixed
Index: gcc-3.3/gcj-status.html
===
RCS file: /cvs/gcc/wwwdocs/htdocs/gcc-3.3/gcj-status.html,v
retrieving revision 1.7
diff -u -r1.7 gcj-status.html
--- gcc-3.3/gcj-status.html 21 Oct 2012 13:12:19 -  1.7
+++ gcc-3.3/gcj-status.html 28 Jun 2014 19:51:09 -
@@ -12,7 +12,7 @@
 
 pWe are tracking all bugs in Bugzilla.  Any bugs that we want to fix
 for the 3.3 release will be marked emhigh/em priority (a
-href=http://gcc.gnu.org/bugzilla/buglist.cgi?short_desc_type=allwordssubstamp;component=javaamp;long_desc_type=substringamp;long_desc=amp;bug_file_loc_type=allwordssubstramp;bug_file_loc=amp;gcchost_type=allwordssubstramp;gcchost=amp;gcctarget_type=allwordssubstramp;gcctarget=amp;gccbuild_type=allwordssubstramp;gccbuild=amp;keywords_type=allwordsamp;keywords=amp;bug_status=UNCONFIRMEDamp;bug_status=NEWamp;bug_status=ASSIGNEDamp;bug_status=SUSPENDEDamp;bug_status=WAITINGamp;bug_status=REOPENEDamp;bug_severity=criticalamp;emailassigned_to1=1amp;emailtype1=substringamp;email1=amp;emailassigned_to2=1amp;emailreporter2=1amp;emailcc2=1amp;emailtype2=substringamp;bugidtype=includeamp;cmdtype=doitamp;order=Bug+Number;see
+href=https://gcc.gnu.org/bugzilla/buglist.cgi?short_desc_type=allwordssubstamp;component=javaamp;long_desc_type=substringamp;long_desc=amp;bug_file_loc_type=allwordssubstramp;bug_file_loc=amp;gcchost_type=allwordssubstramp;gcchost=amp;gcctarget_type=allwordssubstramp;gcctarget=amp;gccbuild_type=allwordssubstramp;gccbuild=amp;keywords_type=allwordsamp;keywords=amp;bug_status=UNCONFIRMEDamp;bug_status=NEWamp;bug_status=ASSIGNEDamp;bug_status=SUSPENDEDamp;bug_status=WAITINGamp;bug_status=REOPENEDamp;bug_severity=criticalamp;emailassigned_to1=1amp;emailtype1=substringamp;email1=amp;emailassigned_to2=1amp;emailreporter2=1amp;emailcc2=1amp;emailtype2=substringamp;bugidtype=includeamp;cmdtype=doitamp;order=Bug+Number;see
 list/a)./p
 
 h2 Packages /h2
Index: gcc-3.4/changes.html
===
RCS file: /cvs/gcc/wwwdocs/htdocs/gcc-3.4/changes.html,v
retrieving revision 1.161
diff -u -r1.161 changes.html
--- gcc-3.4/changes.html28 Jun 2014 07:45:11 -  1.161
+++ gcc-3.4/changes.html28 Jun 2014 19:51:10 -
@@ -1225,7 +1225,7 @@
 A vast number of bugs have been fixed in 3.4.0, too many to publish a
 complete list here.
 a
-href=http://gcc.gnu.org/bugzilla/buglist.cgi?short_desc_type=notregexpamp;short_desc=%5C%5B3%5C.4.*%5BRr%5Degressionamp;target_milestone=3.4.0amp;bug_status=RESOLVEDamp;resolution=FIXED;Follow
+href=https://gcc.gnu.org/bugzilla/buglist.cgi?short_desc_type=notregexpamp;short_desc=%5C%5B3%5C.4.*%5BRr%5Degressionamp;target_milestone=3.4.0amp;bug_status=RESOLVEDamp;resolution=FIXED;Follow
 this link/a to query the Bugzilla database for the list of over 900 bugs
 fixed in 3.4.0.  This is the list of all bugs marked as resolved and fixed
 in 3.4.0 that 

[C++ Patch] PR 51400

2014-06-28 Thread Paolo Carlini

Hi,

this issue manifests itself as an ICE on the gcc_assert toward the end 
of start_decl:


  if (VAR_P (decl)
   DECL_NAMESPACE_SCOPE_P (decl)  !TREE_PUBLIC (decl)  
!was_public

   !DECL_THIS_STATIC (decl)  !DECL_ARTIFICIAL (decl))
{
  /* This is a const variable with implicit 'static'.  Set
 DECL_THIS_STATIC so we can tell it from variables that are
 !TREE_PUBLIC because of the anonymous namespace.  */
  gcc_assert (CP_TYPE_CONST_P (TREE_TYPE (decl)) || errorcount);
  DECL_THIS_STATIC (decl) = 1;
}

and the reason seems clear to me: both handle_noreturn_attribute and 
handle_const_attribute call build_pointer_type and discard the 
TYPE_QUALS on the original POINTER_TYPE. That seems obviously incorrect. 
The below fixes the ICE and passes testing.


Thanks!
Paolo.

/
/c-family
2014-06-28  Paolo Carlini  paolo.carl...@oracle.com

PR c++/51400
* c-common.c (handle_noreturn_attribute, handle_const_attribute):
Do not discard TYPE_QUALS of type.

/testsuite
2014-06-28  Paolo Carlini  paolo.carl...@oracle.com

PR c++/51400
* g++.dg/cpp0x/constexpr-attribute3.C: New.
Index: c-family/c-common.c
===
--- c-family/c-common.c (revision 212104)
+++ c-family/c-common.c (working copy)
@@ -6575,9 +6575,11 @@ handle_noreturn_attribute (tree *node, tree name,
   else if (TREE_CODE (type) == POINTER_TYPE
TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
 TREE_TYPE (*node)
-  = build_pointer_type
-   (build_type_variant (TREE_TYPE (type),
-TYPE_READONLY (TREE_TYPE (type)), 1));
+  = (build_qualified_type
+(build_pointer_type
+ (build_type_variant (TREE_TYPE (type),
+  TYPE_READONLY (TREE_TYPE (type)), 1)),
+ TYPE_QUALS (type)));
   else
 {
   warning (OPT_Wattributes, %qE attribute ignored, name);
@@ -6988,9 +6990,11 @@ handle_const_attribute (tree *node, tree name, tre
   else if (TREE_CODE (type) == POINTER_TYPE
TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
 TREE_TYPE (*node)
-  = build_pointer_type
-   (build_type_variant (TREE_TYPE (type), 1,
-TREE_THIS_VOLATILE (TREE_TYPE (type;
+  = (build_qualified_type
+(build_pointer_type
+ (build_type_variant (TREE_TYPE (type), 1,
+  TREE_THIS_VOLATILE (TREE_TYPE (type,
+ TYPE_QUALS (type)));
   else
 {
   warning (OPT_Wattributes, %qE attribute ignored, name);
Index: testsuite/g++.dg/cpp0x/constexpr-attribute3.C
===
--- testsuite/g++.dg/cpp0x/constexpr-attribute3.C   (revision 0)
+++ testsuite/g++.dg/cpp0x/constexpr-attribute3.C   (working copy)
@@ -0,0 +1,5 @@
+// PR c++/51400
+// { dg-do compile { target c++11 } }
+
+constexpr int (*f)() __attribute__((noreturn)) = 0;
+constexpr int (*g)() __attribute__((const)) = 0;


[PATCH PR C++/58781, 59867, 60249 ] Various user-defined string literal issues involving character encodings, dropped bytes, semi-infinite loops

2014-06-28 Thread Ed Smith-Rowland
Please disregard previous email Re: [Bug c++/60249] [c++11] Compiler 
goes into semi-infinite loop with wrong usage of user defined string 
literals

A new patch with tweaked testcase is attached.  Sorry for the noise.

I finally fixed these weird user-defined string literal bugs.

I was messing with cp_token stream unnecessarily and poorly.  Changed by 
using a tree in cp_parser_userdef_string_literal.


PR C++/58781  https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58781  - 
Unicode strings broken in a strange way
PR C++/59867  https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59867  - 
Template string literal loses first symbol
PR C++/60249  https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60249  - 
Compiler goes into semi-infinite loop with wrong usage of user defined 
string literals
Plus I fixed an misleading error message for string literal operator 
templates (not available in C++11).


Built and tested clean on x86_64-linux.

OK?

I would also like to apply this to 4.9.

Ed Smith-Rowland


cp/

2014-06-28  Edward Smith-Rowland  3dw...@verizon.net

PR c++/58781
PR c++/60249
PR c++/59867
* parser.c (cp_parser_userdef_string_literal()): Take a tree
not a cp_token*. (cp_parser_string_literal(): Don't hack
the token stream!


testsuite/

2014-06-28  Edward Smith-Rowland  3dw...@verizon.net

PR c++/58781
PR c++/60249
PR c++/59867
* testsuite/g++.dg/cpp0x/pr58781.C: New.
* testsuite/g++.dg/cpp0x/pr60249.C: New.
* testsuite/g++.dg/cpp1y/pr59867.C: New.


Index: cp/parser.c
===
--- cp/parser.c (revision 212100)
+++ cp/parser.c (working copy)
@@ -1899,7 +1899,7 @@
 static tree cp_parser_userdef_char_literal
   (cp_parser *);
 static tree cp_parser_userdef_string_literal
-  (cp_token *);
+  (tree);
 static tree cp_parser_userdef_numeric_literal
   (cp_parser *);
 
@@ -3721,8 +3721,7 @@
{
  tree literal = build_userdef_literal (suffix_id, value,
OT_NONE, NULL_TREE);
- tok-u.value = literal;
- return cp_parser_userdef_string_literal (tok);
+ value = cp_parser_userdef_string_literal (literal);
}
 }
   else
@@ -3970,9 +3969,8 @@
as arguments.  */
 
 static tree
-cp_parser_userdef_string_literal (cp_token *token)
+cp_parser_userdef_string_literal (tree literal)
 {
-  tree literal = token-u.value;
   tree suffix_id = USERDEF_LITERAL_SUFFIX_ID (literal);
   tree name = cp_literal_operator_id (IDENTIFIER_POINTER (suffix_id));
   tree value = USERDEF_LITERAL_VALUE (literal);
@@ -23202,10 +23200,17 @@
ok = false;
}
   if (!ok)
-   error (literal operator template %qD has invalid parameter list.
-Expected non-type template argument pack char...
-   or typename CharT, CharT...,
-  decl);
+   {
+ if (cxx_dialect = cxx1y)
+   error (literal operator template %qD has invalid parameter list.
+Expected non-type template argument pack char...
+   or typename CharT, CharT...,
+  decl);
+ else
+   error (literal operator template %qD has invalid parameter list.
+Expected non-type template argument pack char...,
+  decl);
+   }
 }
   /* Register member declarations.  */
   if (member_p  !friend_p  decl  !DECL_CLASS_TEMPLATE_P (decl))
Index: testsuite/g++.dg/cpp0x/pr58781.C
===
--- testsuite/g++.dg/cpp0x/pr58781.C(revision 0)
+++ testsuite/g++.dg/cpp0x/pr58781.C(working copy)
@@ -0,0 +1,18 @@
+// PR c++/58781
+// { dg-do compile { target c++11 } }
+
+#include cstddef
+
+int
+operator_s(const char32_t *a, size_t b)
+{
+  return 0;
+}
+
+int
+f()
+{
+  using a = decltype(U\x1181_s);
+  using b = decltype(U\x8111_s);
+  using c = decltype(U \x1181_s);
+}
Index: testsuite/g++.dg/cpp0x/pr60249.C
===
--- testsuite/g++.dg/cpp0x/pr60249.C(revision 0)
+++ testsuite/g++.dg/cpp0x/pr60249.C(working copy)
@@ -0,0 +1,6 @@
+// PR c++/60249
+// { dg-do compile { target c++11 } }
+
+decltype(_) x; // { dg-error unable to find string literal operator }
+
+// { dg-error invalid type in declaration before invalid { target *-*-* } 
4 }
Index: testsuite/g++.dg/cpp1y/pr59867.C
===
--- testsuite/g++.dg/cpp1y/pr59867.C(revision 0)
+++ testsuite/g++.dg/cpp1y/pr59867.C(working copy)
@@ -0,0 +1,52 @@
+// PR c++/59867
+// { dg-do compile { target c++14 } }
+
+#include iostream
+using namespace std;
+
+// constant
+templatetypename T, T x
+  struct meta_value
+  {
+typedef meta_value type;
+typedef T value_type;
+static const T value = x;
+  };
+
+// array
+templatetypename T, T... data
+  

Re: [PATCH] Fix gennews

2014-06-28 Thread Gerald Pfeifer
On Thu, 12 Jun 2014, Richard Biener wrote:
 It seems the https transition broke refering to permanently moved
 URL gcc-3.0/gcc-3.0.html (I get a certificate error or some such),
 breaking gennews and thus gcc_release.  Fixed like below which
 makes gennews succeed.
 
 Committed to the 4.7 branch.
 
 Richard.
 
 2014-06-12  Richard Biener  rguent...@suse.de
 
   * gennews: Use gcc-3.0/index.html.

I also applied this to trunk and the GCC 4.9 branch.

Gerald


update address taken: don't drop clobbers

2014-06-28 Thread Marc Glisse

Hello,

we currently drop clobbers on variables whose address is not taken 
anymore. However, rewrite_stmt has code to replace them with an SSA_NAME 
with a default definition (an uninitialized variable), and I believe 
rewrite_update_stmt should do the same. This allows us to warn sometimes 
(see testcase), but during the debugging I also noticed several places 
where it allowed CCP to simplify further PHIs, so this is also an 
optimization.


In an earlier version of the patch, I was using
get_or_create_ssa_default_def (cfun, sym);
(I was reusing the same variable). This passed bootstrap+testsuite on all 
languages except for ada. Indeed, the compiler wanted to coalesce several 
SSA_NAMEs, including those new ones, in out-of-ssa, but couldn't. There 
are abnormal PHIs involved. Maybe it shouldn't have insisted on coalescing 
an undefined ssa_name, maybe something should have prevented us from 
reaching such a situation, but creating a new variable was the simplest 
workaround.


Some things could be done to improve the error message in uninit:
- getting the location of the variable,
- differenciating uninitialized from clobbered,
but that can come later.

Bootstrap+testsuite (all,obj-c++,ada,go) on x86_64-unknown-linux-gnu.

2014-06-30  Marc Glisse  marc.gli...@inria.fr

PR tree-optimization/60770
gcc/
* tree-ssa.c (execute_update_addresses_taken): Don't drop clobbers.
* tree-into-ssa.c (maybe_register_def): Replace clobbers with a
default definition.
gcc/testsuite/
* gcc.dg/tree-ssa/pr60770-1.c: New file.

--
Marc GlisseIndex: gcc/testsuite/gcc.dg/tree-ssa/pr60770-1.c
===
--- gcc/testsuite/gcc.dg/tree-ssa/pr60770-1.c   (revision 0)
+++ gcc/testsuite/gcc.dg/tree-ssa/pr60770-1.c   (working copy)
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options -O -Wall } */
+
+int f(int n){
+  int*p;
+  {
+int yyy=n;
+p=yyy;
+  }
+  return *p; /* { dg-warning yyy } */
+}
Index: gcc/tree-into-ssa.c
===
--- gcc/tree-into-ssa.c (revision 212109)
+++ gcc/tree-into-ssa.c (working copy)
@@ -1831,26 +1831,38 @@ maybe_register_def (def_operand_p def_p,
 {
   tree def = DEF_FROM_PTR (def_p);
   tree sym = DECL_P (def) ? def : SSA_NAME_VAR (def);
 
   /* If DEF is a naked symbol that needs renaming, create a new
  name for it.  */
   if (marked_for_renaming (sym))
 {
   if (DECL_P (def))
{
- tree tracked_var;
-
- def = make_ssa_name (def, stmt);
+ if (gimple_clobber_p (stmt)  is_gimple_reg (sym))
+   {
+ /* Replace clobber stmts with a default def.  Create a new
+variable so we don't later think we must coalesce, which would
+fail with some ada abnormal PHIs.  Still, we try to keep a
+similar name so error messages make sense.  */
+ unlink_stmt_vdef (stmt);
+ gsi_replace (gsi, gimple_build_nop (), true);
+ tree id = DECL_NAME (sym);
+ const char* name = id ? IDENTIFIER_POINTER (id) : 0;
+ tree newvar = create_tmp_var (TREE_TYPE (sym), name);
+ def = get_or_create_ssa_default_def (cfun, newvar);
+   }
+ else
+   def = make_ssa_name (def, stmt);
  SET_DEF (def_p, def);
 
- tracked_var = target_for_debug_bind (sym);
+ tree tracked_var = target_for_debug_bind (sym);
  if (tracked_var)
{
  gimple note = gimple_build_debug_bind (tracked_var, def, stmt);
  /* If stmt ends the bb, insert the debug stmt on the single
 non-EH edge from the stmt.  */
  if (gsi_one_before_end_p (gsi)  stmt_ends_bb_p (stmt))
{
  basic_block bb = gsi_bb (gsi);
  edge_iterator ei;
  edge e, ef = NULL;
Index: gcc/tree-ssa.c
===
--- gcc/tree-ssa.c  (revision 212109)
+++ gcc/tree-ssa.c  (working copy)
@@ -1607,32 +1607,20 @@ execute_update_addresses_taken (void)
rhs = gimple_assign_rhs1 (stmt);
if (gimple_assign_lhs (stmt) != lhs
 !useless_type_conversion_p (TREE_TYPE (lhs),
   TREE_TYPE (rhs)))
  rhs = fold_build1 (VIEW_CONVERT_EXPR,
 TREE_TYPE (lhs), rhs);
 
if (gimple_assign_lhs (stmt) != lhs)
  gimple_assign_set_lhs (stmt, lhs);
 
-   /* For var ={v} {CLOBBER}; where var lost
-  TREE_ADDRESSABLE just remove the stmt.  */
-   if (DECL_P (lhs)
-TREE_CLOBBER_P (rhs)
-bitmap_bit_p (suitable_for_renaming, DECL_UID (lhs)))
- {
-   unlink_stmt_vdef (stmt);
-  

[wwwdocs] Reduce/relativize links in gcc-*/*

2014-06-28 Thread Gerald Pfeifer
Remove a couple of links.  Make a couple of links relative.
Consistently use bug tracker to refer to our Bugzilla system.

As a side effect, this further reduces the number of http links 
to gcc.gnu.org.

Applied.

Gerald

Index: gcc-3.3/changes.html
===
RCS file: /cvs/gcc/wwwdocs/htdocs/gcc-3.3/changes.html,v
retrieving revision 1.61
diff -u -r1.61 changes.html
--- gcc-3.3/changes.html28 Jun 2014 20:35:50 -  1.61
+++ gcc-3.3/changes.html28 Jun 2014 22:41:27 -
@@ -916,8 +916,7 @@
 
 h3Bug Fixes/h3
 
-pThis section lists the problem reports (PRs) from 
-a href=http://gcc.gnu.org/bugzilla/;GCC's bug tracking system/a
+pThis section lists the problem reports (PRs) from GCC's bug tracker
 that are known to be fixed in the 3.3.2 release. This list might not be
 complete (that is, it is possible that some PRs that have been fixed are
 not listed here)./p
@@ -1058,8 +1057,7 @@
 
 h3Bug Fixes/h3
 
-pThis section lists the problem reports (PRs) from 
-a href=http://gcc.gnu.org/bugzilla/;GCC's bug tracking system/a
+pThis section lists the problem reports (PRs) from GCC's bug tracker
 that are known to be fixed in the 3.3.3 release. This list might not be
 complete (that is, it is possible that some PRs that have been fixed are
 not listed here)./p
Index: gcc-4.0/changes.html
===
RCS file: /cvs/gcc/wwwdocs/htdocs/gcc-4.0/changes.html,v
retrieving revision 1.65
diff -u -r1.65 changes.html
--- gcc-4.0/changes.html28 Jun 2014 20:35:51 -  1.65
+++ gcc-4.0/changes.html28 Jun 2014 22:41:27 -
@@ -346,7 +346,7 @@
 h3Fortran/h3
 
   ul
-liA new a href=http://gcc.gnu.org/fortran/;Fortran/a front end
+liA new a href=../fortran/Fortran/a front end
 has replaced the aging GNU Fortran 77 front end.  The new front end
 supports Fortran 90 and Fortran 95.  It may not yet be as stable as
 the old Fortran front end.
Index: gcc-4.3/changes.html
===
RCS file: /cvs/gcc/wwwdocs/htdocs/gcc-4.3/changes.html,v
retrieving revision 1.129
diff -u -r1.129 changes.html
--- gcc-4.3/changes.html28 Jun 2014 20:35:51 -  1.129
+++ gcc-4.3/changes.html28 Jun 2014 22:41:28 -
@@ -163,8 +163,7 @@
 platforms and code-msse/-msse2/code for i?86 and x86_64./li
 
 liMore information on porting to GCC 4.3 from previous versions
-of GCC can be found in
-the a href=http://gcc.gnu.org/gcc-4.3/porting_to.html;porting
+of GCC can be found in the a href=porting_to.htmlporting
 guide/a for this release./li
   /ul
 
Index: gcc-4.3/porting_to.html
===
RCS file: /cvs/gcc/wwwdocs/htdocs/gcc-4.3/porting_to.html,v
retrieving revision 1.11
diff -u -r1.11 porting_to.html
--- gcc-4.3/porting_to.html 28 Jun 2014 07:45:13 -  1.11
+++ gcc-4.3/porting_to.html 28 Jun 2014 22:41:28 -
@@ -9,8 +9,7 @@
 
 p
 The GCC 4.3 release series differs from previous GCC releases in more
-than the usual list
-of a href=http://gcc.gnu.org/gcc-4.3/changes.html;new
+than the usual list of a href=changes.htmlnew
 features/a. Some of these changes are a result of bug fixing, and
 some old behaviors have been intentionally changed in order to support
 new standards, or relaxed in standards-conforming ways to facilitate
Index: gcc-4.4/changes.html
===
RCS file: /cvs/gcc/wwwdocs/htdocs/gcc-4.4/changes.html,v
retrieving revision 1.87
diff -u -r1.87 changes.html
--- gcc-4.4/changes.html28 Jun 2014 20:35:51 -  1.87
+++ gcc-4.4/changes.html28 Jun 2014 22:41:28 -
@@ -121,8 +121,7 @@
 are issued, then GCC warns about the unknown options./li

 liMore information on porting to GCC 4.4 from previous versions
-of GCC can be found in
-the a href=http://gcc.gnu.org/gcc-4.4/porting_to.html;porting
+of GCC can be found in the a href=porting_to.htmlporting
 guide/a for this release./li
  /ul
 
Index: gcc-4.4/porting_to.html
===
RCS file: /cvs/gcc/wwwdocs/htdocs/gcc-4.4/porting_to.html,v
retrieving revision 1.8
diff -u -r1.8 porting_to.html
--- gcc-4.4/porting_to.html 27 Jun 2014 18:53:31 -  1.8
+++ gcc-4.4/porting_to.html 28 Jun 2014 22:41:28 -
@@ -9,8 +9,7 @@
 
 p
 The GCC 4.4 release series differs from previous GCC releases in more
-than the usual list
-of a href=http://gcc.gnu.org/gcc-4.4/changes.html;new
+than the usual list of a href=changes.htmlnew
 features/a. Some of these changes are a result of bug fixing, and
 some old behaviors have been intentionally changed in order to support
 new standards, or relaxed in standards-conforming ways to facilitate
Index: gcc-4.6/changes.html

Re: [i386] Replace builtins with vector extensions

2014-06-28 Thread Marc Glisse

On Sat, 28 Jun 2014, Ulrich Drepper wrote:


On Sat, Jun 28, 2014 at 6:42 AM, Marc Glisse marc.gli...@inria.fr wrote:

Ping,

nobody has an opinion on this? Or some explanation why I am mistaken to
believe that #pragma target makes it safer now?

It would enable a number of optimizations, like constant propagation, FMA
contraction, etc. It would also allow us to remove several builtins.


I see no problem with using the array-type access to the registers.

As for replacing the builtins with arithmetic operators: I appreciate
the possibility for optimization.  But is there any chance the calls
could not end up being implemented with a vector instruction?  I think
that would be bad.  The intrinsics should be a way to guarantee that
the programmer can create vector instructions.  Otherwise we might
just not support them.


There is always a risk, but then even with builtins I think there was a 
small risk that an RTL optimization would mess things up. It is indeed 
higher if we expose the operation to the optimizers earlier, but it would 
be a bug if an optimization replaced a vector operation by something 
worse. Also, I am only proposing to handle the most trivial operations 
this way, not more complicated ones (like v[0]+=s) where we would be 
likely to fail generating the right instruction. And the pragma should 
ensure that the function will always be compiled in a mode where the 
vector instruction is available.


ARM did the same and I don't think I have seen a bug reporting a 
regression about it (I haven't really looked though).


Thanks,

--
Marc Glisse


[patch, libgfortran] PR61640 KIND=4 Character Array Internal Unit Read Fail

2014-06-28 Thread Jerry DeLisle
The attached patch is obvious and simple.  I will commit to trunk soon.

There are two things obvious about this.

1) Using the wrong function for wide characters.

2) No one must be using this feature of Fortran since the bug exists at least
back to 4.5

;)

Regression tested on x86-64-linux-gnu.

Test case attached. I would suggest since it is a wrong code bug, we should at
least port to 4.9.1.  I will wait a while before doing that and won't if anyone
feels strongly about not doing so. A portion of the patch in eat_spaces is a
correction to the fix for PR61499 for KIND=4.

Regards,

Jerry

2014-06-28  Jerry DeLisle  jvdeli...@gcc.gnu.org

PR libgfortran/61640
* io/list_read.c (next_char_internal): Adjust the read length to
a single wide character. (eat_spaces): Add missing paren.
* io/unix.c (mem_read4): Use the correct mem_alloc function for
wide character internal reads.
Index: list_read.c
===
--- list_read.c	(revision 212104)
+++ list_read.c	(working copy)
@@ -273,7 +273,7 @@ next_char_internal (st_parameter_dt *dtp)
   /* Get the next character and handle end-of-record conditions.  */
 
   if (dtp-common.unit) /* Check for kind=4 internal unit.  */
-   length = sread (dtp-u.p.current_unit-s, c, sizeof (gfc_char4_t));
+   length = sread (dtp-u.p.current_unit-s, c, 1);
   else
{
  char cc;
@@ -399,7 +399,7 @@ eat_spaces (st_parameter_dt *dtp)
 	{
 	  for (i = 0; i  dtp-u.p.current_unit-bytes_left; i++)
 	{
-	  if (dtp-internal_unit[offset + i * sizeof (gfc_char4_t)]
+	  if (dtp-internal_unit[(offset + i) * sizeof (gfc_char4_t)]
 		  != (gfc_char4_t)' ')
 	break;
 	}
Index: unix.c
===
--- unix.c	(revision 212104)
+++ unix.c	(working copy)
@@ -808,10 +808,10 @@ mem_read4 (stream * s, void * buf, ssize_t nbytes)
   void *p;
   int nb = nbytes;
 
-  p = mem_alloc_r (s, nb);
+  p = mem_alloc_r4 (s, nb);
   if (p)
 {
-  memcpy (buf, p, nb);
+  memcpy (buf, p, nb * 4);
   return (ssize_t) nb;
 }
   else
! { dg-do run }
! PR61640 KIND=4 Character Array Internal Unit Read Fail
program read_internal
  integer :: x(9),i
  integer :: y(9)
  character(kind=4,len=30), dimension(3) :: source

  y = reshape ((/ 1,1,-1,1,-1,1,-1,1,1 /), shape(x))
  source=[4_  1   1  -1,4_  1  -1   1,4_ -1   1   1]
  !print *, (trim(source(i)), i=1,3)
  read(source,*) (x(i), i=1,9) ! This read fails for KIND=4 character
  if (any(x /= y )) call abort
end program read_internal


[C++] Avoid producing duplicate binfos for member pointers

2014-06-28 Thread Jan Hubicka
Jason,
this is another case cought by the type variant checking.  
build_ptrmemfunc_type,
for qualified type, first calls itself recursively to produce member pointer 
type
for unqalified variant.

Subsequentely it produces the member pointer from scratch - I believe it is 
because
the field decl representing pointer should be qualified, so we have rather rare
case where we do not share fields in between type and variant (other is
Fortran when dropping restrict quantifiers deeply from the structure).

It however produces fresh BINFO for the variant and overwrites its BINFO_TYPE
pointer to t.  I do not see a reason for having duplicated binfo here: both
structures should be equivalent from type inheritance POV.

This patch just avoids the duplicated BINFO and copies one from unqalified 
variant,
if available.

Seems sane?

Bootstrapped/regtested x86_64-linux.

* decl.c (build_ptrmemfunc_type): Do not produce duplicated BINFO
for the variant.
Index: cp/decl.c
===
--- cp/decl.c   (revision 212098)
+++ cp/decl.c   (working copy)
@@ -8074,7 +8074,6 @@ build_ptrmemfunc_type (tree type)
   = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
 
   t = make_class_type (RECORD_TYPE);
-  xref_basetypes (t, NULL_TREE);
 
   /* Let the front end know this is a pointer to member function...  */
   TYPE_PTRMEMFUNC_FLAG (t) = 1;
@@ -8109,8 +8108,10 @@ build_ptrmemfunc_type (tree type)
   TYPE_MAIN_VARIANT (t) = unqualified_variant;
   TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
   TYPE_NEXT_VARIANT (unqualified_variant) = t;
-  TREE_TYPE (TYPE_BINFO (t)) = t;
+  TYPE_BINFO (t) = TYPE_BINFO (unqualified_variant);
 }
+  else
+xref_basetypes (t, NULL_TREE);
 
   /* Cache this pointer-to-member type so that we can find it again
  later.  */


[wwwdocs] gcc-4.4/porting_to.html: convert a textual reference to a proper one

2014-06-28 Thread Gerald Pfeifer
...and improve wording and markup a bit.

Applied.

Gerald

Index: bugs/index.html
===
RCS file: /cvs/gcc/wwwdocs/htdocs/bugs/index.html,v
retrieving revision 1.113
diff -u -r1.113 index.html
--- bugs/index.html 28 Jun 2014 07:45:05 -  1.113
+++ bugs/index.html 28 Jun 2014 23:28:17 -
@@ -350,7 +350,8 @@
 anything)./p/dd
 
 
-dtCasting does not work as expected when optimization is turned on./dt
+dt id=casting_and_optimizationCasting does not work as expected when
+optimization is turned on./dt
 
 ddpThis is often caused by a violation of aliasing rules, which are part
 of the ISO C standard.  These rules say that a program is invalid if you try
Index: gcc-4.4/porting_to.html
===
RCS file: /cvs/gcc/wwwdocs/htdocs/gcc-4.4/porting_to.html,v
retrieving revision 1.9
diff -u -r1.9 porting_to.html
--- gcc-4.4/porting_to.html 28 Jun 2014 22:44:29 -  1.9
+++ gcc-4.4/porting_to.html 28 Jun 2014 23:28:17 -
@@ -95,10 +95,10 @@
 using code-fno-strict-aliasing /code or by ignoring this class of
 warning via code-Wno-strict-aliasing/code. To fix, access the
 structure from pointers of an equivalent type, use a union, use
-memcpy, or (if using C++) use placement new. See the section titled
-quot;Casting does not work as expected when optimization is turned
-onquot; on a href=http://gcc.gnu.org/bugs/;bug reporting
-documentation page/a for more information.
+memcpy, or (if using C++) use placement codenew/code. 
+See the section a href=../bugs/#casting_and_optimization 
+Casting does not work as expected when optimization is turned on/a
+in our bug reporting documentation for more information.
 /p
 
 h2C++ language issues/h2


Re: [RFC] Add a .gitattributes file for use with git-merge-changelog

2014-06-28 Thread Samuel Bronson
Ouch; it looks like my last attempt to reply to this missed gdb-patches@
due to a gmane accident?

Samuel Bronson naes...@gmail.com writes:

 Tom Tromey tro...@redhat.com writes:
 Samuel == Samuel Bronson naes...@gmail.com writes:

 Samuel [Am I really supposed to CC this to gcc@ like binutils/MAINTAINERS
 Samuel says I should?]

 I think just for files that are intended to be put in both trees and
 shared.

 Well, they're certainly welcome to add such a file to their repository.

 Samuel Individual users will still have to:
 Samuel  1. Install git-merge-changelog
 Samuel  2. Set up the merge driver in their git config

 What happens if they do not?

 Not much; git just falls back to the default (text) merge driver in
 that case.  (This appears to have been so obvious that nobody actually
 bothered to document it?)

 I find myself wondering: how much commentary should go into the
 .gitattributes file, and do such files get ChangeLog entries?

 --
 Hi! I'm a .signature virus! Copy me into your ~/.signature to help me spread!



-- 
Hi! I'm a .signature virus! Copy me into your ~/.signature to help me spread!


Re: Optimize type streaming

2014-06-28 Thread Jan Hubicka
 Minor comments below, ok with those changes.
Thanks!
This is version of patch I commited after additional testing on building of
some bigger apps with LTO.  The main change (in addition to those requested) is
that I moved the fixups into lto_copy_fields_not_streamed and added loop before
SCC unification. I plan to do more of the copying and it would be getting hard
to walk all the copies in compare_tree_sccs_1.

Second change is that I moved back streaming of DECL_FIELDS. THere are two cases
where we produce variant with different fields - a member pointer with different
qualifiers and gfc_nonrestricted_type that recursively drops restrict qualifiers
from the types.  These seems valid reasons.

I also removed use of TYPE_MAXVAL and TYPE_MINVAL and expanded individual uses.
MAXVAL/MINVAL is kind of hack and even the updated conditions wasn't quite 
correct
on when these are used and when these needs to be copied.  There are quite few
types that do not use this field at all and there is no need to stream it.

Bootstrapped/regtested x86_64-linux and comitted.

Honza

* tree-streamer-out.c (pack_ts_type_common_value_fields): Stream if type
is complete.
(write_ts_type_common_tree_pointers): Do not stream fields not set for 
incomplete
types; do not stream duplicated fields for variants; sanity check that 
variant
and type match.
(write_ts_type_non_common_tree_pointers): Likewise.
* tree-streamer-in.c (unpack_ts_type_common_value_fields): Mark in 
TYPE_SIZE whether
type is complete.
(lto_input_ts_type_common_tree_pointers): Do same changes as in
write_ts_type_common_tree_pointers
(lto_input_ts_type_non_common_tree_pointers): Likewise.

* lto.c (lto_copy_fields_not_streamed): New function.
(compare_tree_sccs_1): Do not compare fields shared in between type
and variant.
(lto_read_decls): Fixup types first before inserting into hash.
Index: tree-streamer-in.c
===
--- tree-streamer-in.c  (revision 212098)
+++ tree-streamer-in.c  (working copy)
@@ -357,6 +357,13 @@ unpack_ts_type_common_value_fields (stru
   TYPE_RESTRICT (expr) = (unsigned) bp_unpack_value (bp, 1);
   TYPE_USER_ALIGN (expr) = (unsigned) bp_unpack_value (bp, 1);
   TYPE_READONLY (expr) = (unsigned) bp_unpack_value (bp, 1);
+  /* This bit represent if type is complete, or if the TYPE_SIZE
+ is non-NULL.  Mark this fact into TYPE_SIZE. The actual values
+ will be filled in later.  */
+  if ((unsigned) bp_unpack_value (bp, 1))
+TYPE_SIZE (expr) = error_mark_node;
+  else
+TYPE_SIZE (expr) = NULL_TREE;
   TYPE_PRECISION (expr) = bp_unpack_var_len_unsigned (bp);
   TYPE_ALIGN (expr) = bp_unpack_var_len_unsigned (bp);
   TYPE_ALIAS_SET (expr) = bp_unpack_var_len_int (bp);
@@ -794,19 +801,29 @@ static void
 lto_input_ts_type_common_tree_pointers (struct lto_input_block *ib,
struct data_in *data_in, tree expr)
 {
-  TYPE_SIZE (expr) = stream_read_tree (ib, data_in);
-  TYPE_SIZE_UNIT (expr) = stream_read_tree (ib, data_in);
-  TYPE_ATTRIBUTES (expr) = stream_read_tree (ib, data_in);
+  TYPE_MAIN_VARIANT (expr) = stream_read_tree (ib, data_in);
+
+  /* Variants share most the properties with the main variant.  */
+  if (TYPE_MAIN_VARIANT (expr) == expr)
+{
+  if (COMPLETE_TYPE_P (expr))
+   {
+ TYPE_SIZE (expr) = stream_read_tree (ib, data_in);
+ TYPE_SIZE_UNIT (expr) = stream_read_tree (ib, data_in);
+   }
+  TYPE_ATTRIBUTES (expr) = stream_read_tree (ib, data_in);
+}
+  /* The fileds not streamed will be copied by
+ lto_copy_fields_not_streamed.  */
   TYPE_NAME (expr) = stream_read_tree (ib, data_in);
+  TYPE_CONTEXT (expr) = stream_read_tree (ib, data_in);
+  TYPE_STUB_DECL (expr) = stream_read_tree (ib, data_in);
   /* Do not stream TYPE_POINTER_TO or TYPE_REFERENCE_TO.  They will be
  reconstructed during fixup.  */
   /* Do not stream TYPE_NEXT_VARIANT, we reconstruct the variant lists
  during fixup.  */
-  TYPE_MAIN_VARIANT (expr) = stream_read_tree (ib, data_in);
-  TYPE_CONTEXT (expr) = stream_read_tree (ib, data_in);
   /* TYPE_CANONICAL gets re-computed during type merging.  */
   TYPE_CANONICAL (expr) = NULL_TREE;
-  TYPE_STUB_DECL (expr) = stream_read_tree (ib, data_in);
 }
 
 /* Read all pointer fields in the TS_TYPE_NON_COMMON structure of EXPR
@@ -818,21 +835,48 @@ lto_input_ts_type_non_common_tree_pointe
struct data_in *data_in,
tree expr)
 {
-  if (TREE_CODE (expr) == ENUMERAL_TYPE)
-TYPE_VALUES (expr) = stream_read_tree (ib, data_in);
-  else if (TREE_CODE (expr) == ARRAY_TYPE)
-TYPE_DOMAIN (expr) = stream_read_tree (ib, data_in);
-  else if (RECORD_OR_UNION_TYPE_P (expr))
+  if (TYPE_MAIN_VARIANT (expr) == expr)
+{
+  if (TREE_CODE (expr) == 

Re: [PATCH] Convert XCOFF ASM_DECLARE_FUNCTION_NAME to function

2014-06-28 Thread David Edelsohn
BTW, if I enable MAKE_DECL_ONE_ONLY for XCOFF, the endless loop does
not occur, so it clearly has some effect on AIX.  Maybe it can
function well-enough on AIX.

- David


[Committed] Fix lto.c compiling

2014-06-28 Thread Andrew Pinski
I committed this as obvious.  The changelog says it all.

Thanks,
Andrew

2014-06-28  Andrew Pinski  apin...@cavium.com

* lto.c (lto_read_decls): Fix comment in comment.
Index: lto.c
===
--- lto.c   (revision 212118)
+++ lto.c   (working copy)
@@ -1970,7 +1970,7 @@ lto_read_decls (struct lto_file_decl_dat
len, scc_entry_len, scc_hash))
continue;
 
- /* /* Do remaining fixup tasks for prevailing nodes.  */
+ /* Do remaining fixup tasks for prevailing nodes.  */
  bool seen_type = false;
  for (unsigned i = 0; i  len; ++i)
{
Index: ChangeLog
===
--- ChangeLog   (revision 212118)
+++ ChangeLog   (working copy)
@@ -1,3 +1,7 @@
+2014-06-28  Andrew Pinski  apin...@cavium.com
+
+   * lto.c (lto_read_decls): Fix comment in comment.
+
 2014-06-28  Jan Hubicka  hubi...@ucw.cz
 
* lto.c (lto_copy_fields_not_streamed): New function.